- 締切済み
検索の際の濁点区別のかき方
環境:mysql と php でプログラム作ってます。 実施したいこと: mysqlのカラム設定上は utf8_unicode_ci に設定してますが、これだと検索した際 濁点もヒットしてしまうので、 検索結果時に濁点判定を入れたいと考え 以下のプログラムを書いてます。 $sql="select * from テーブル名 where name like '%".$keyword."%' or tel like '%".$keyword."%' collate utf8_bin"; $sql .= "limit " .$page*10 . ", 10"; $datas = mysql_query($sql, $db); while($row=mysql_fetch_array($datas)){ $name = $row["name"]; しかし、実行すると $name = $row["name"]; で記述している箇所でエラーが出てしまいます。 エラーは、 mysql_fetch_array() expects parameter 1 to be resource, boolean given in となっており、 DBからデータを引っ張れていないと思われます。 検索時だけ、collate utf8_binを記述するのは間違っていたのでしょうか。。 アドバイスよろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- mpro-gram
- ベストアンサー率74% (170/228)
No2回答者です、前回の回答のしかたじゃ解りにくかったようなので。 collate の設定は yambejpさんのご指摘の通りで問題ないです。 質問者さんの sql 文が limit の手前に半角空白を入れない限り、構文エラーが直らないだけです。
- yambejp
- ベストアンサー率51% (3827/7415)
もしかして私の把握が間違っています? create table hoge(id int ,v1 varchar(20) character set utf8 collate utf8_unicode_ci ,v2 varchar(20) character set utf8 collate utf8_general_ci); insert into hoge values(1,'は','は'),(2,'ば','ば'),(3,'ぱ','ぱ'); utf8_unicode_ciで設定されているv1とutf8_general_ciで設定されているv2を 比較すれば /*(1)*/ select * from hoge where v1='は'; /*(2)*/ select * from hoge where v1='ば'; /*(3)*/ select * from hoge where v2='は'; /*(4)*/ select * from hoge where v2='ば'; (1)や(2)は、すべてヒットしますが、(3)や(4)なら該当データのみヒットします。 phpMyAdminを使っているなら照合順序も簡単に変えられたと思いますが?
- mpro-gram
- ベストアンサー率74% (170/228)
mysql_query の結果がきちんと返って来ていないというエラーです。 mysql_query() 実行後に mysql_error() を表示してみて、sql文のエラーをチェックして下さい。 というか、$sql を表示してみたら、すぐ解りそうなものだけど? 文字列連結を分割してるせいで見落としてるんでしょうけど、collate utf8_binlimit を指定してもねえ、、、mysql は動かないよ。
- yambejp
- ベストアンサー率51% (3827/7415)
utf8_unicode_ciをutf8_general_ciにしてみては?
お礼
utf8_general_ci と sjis_bin と sjis_japanese_ci にphpアドミン上で設定を変えましたがだめでした、、 iniファイル変更しないと駄目なんでしょうね。。レンタルサーバなので そのあたりの変更ができなくて。。 アドバイスありがとうございます。