ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

MySQLコミュのlike文で検索できない?

  • mixiチェック
  • このエントリーをはてなブックマークに追加
一つわからないことがありましたので皆さんのお力を借りたいと思います。

現在携帯向けシステムをMySQL(Ver.4.02)+php(Ver.4.3.9)で開発しております。で、キーワード検索機能を入れたのですが、それが上手く動きません。
入力されたキーワードをPOSTまたはGETメソッドで受け取り、
where hoge like '%白%'
と言うふうなwhere句付きでデータベースを見て結果を返す、という動作をさせております。で、漢字を入力した場合はちゃんとヒットするのですが、アルファベットのみを入力した場合は全てのレコードがヒットしてしまいます。
携帯向けサイトなのでサイト自体はShift-JISなんですが、データベースはEUC-JPを使っております。そこで、受け取ったキーワードをphpのmb_convert_encoding関数でEUC-JPに変換し、SQL文を作るようになっております。

原因等がお分かりになるようでしたら、お教えいただけると幸いです。

コメント(9)

独学の初心者なりのかんがえになっちゃうんですけど。。
検索する文字列を変数に入れても変わらないですか?
問題の切り分けが先ですね。
1.変数にはちゃんと入っているのか。
2.エンコード後の文字列も望んだとおりになっているか。
3.生成したSQL文は期待通りか。
4.途中でエラーが発生したものを無視して無いか(エラーが無いとおもって復帰値を無視して無いか)
とりあえず、phpMyAdminのようなツールから、まず「生成されているはずのSQL文」で試してみて、Likeの問題なのかどうかを調べてはどうでしょうか。
# いろいろな処理を挟んだ結果とにらめっこしても埒が明きません。
こんにちわ。
僕もMattyanさんと同じような状況に陥りました。

SELECT *
FROM `table`
WHERE `row` LIKE '%ビ%'

というSQL文を実行したのですが、

■環境1
MySQL 4.0.22-standard
PHP Version 4.3.11
では、期待通りの検索結果だったのですが、

■環境2
MySQL 4.0.22
PHP Version 4.3.9
では、何故か「ビ」が含まれないものが混入していました。


両方、データベースの文字コードはEUC-JPで、
SQLは、phpMyAdmin上で実行しました。

何故、環境2で、「ビ」が含まれない文字列が出てきたのでしょう?

「ビ」以外にも、「ピ」や、「ホ」などでも同じようなことが起こります。ちなみに、「ビル」のように問題のある文字が含まれるだけで、予想外の検索結果が出てしまいます。


Mattyanさんと環境が同じなので、MySQLや、PHP 4.3.9の初期設定の問題だと思うのですが、どこをどう直せばよいのかが分かりません。ご返答よろしくお願いします。
すみません。
自分で解決できてしまいました。

SELECT *
FROM `table`
WHERE `row` LIKE binary '%ビ%'

とすると上手くいきました。

(大文字小文字の区別はできない模様)


■参考URL1

ページの下の方に、
「likeで検索されない」
と、書いてあるところがあるので、そこを見てください。
FireFox なんかで、Ctrl+Fで検索すればすぐ出てきます。

http://hidekazu.dhs1.sst.ne.jp/pukiwiki/pukiwiki.php?MySQL



■参考URL2

以下は抜粋。

ーーーーーーーーーーーー
MySQL 4.0.2で導入された、

* Use `Turbo Boyer-Moore' algorithm to speed up `LIKE "%keyword%"' searches.

の影響のようです。"%string%" 形式の LIKE だけ特別な関数を呼んで処理するようになってました。その関数はマルチバイトを意識してません。
ーーーーーーーーーーーーーー
↓
http://myna2.mysql.gr.jp/mysqlml/mysql/msg/7213

■

マルチバイトに対応してないのを公開してくれるなよ。。
と思ってしまいまいした。

お騒がせししてしまい、申し訳ありませんでした。
なるほど。my.cnfを今度調べてみますね。
情報ありがとうござます!

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

MySQL 更新情報

MySQLのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング