- ベストアンサー
LIKEで検索
MySQL 4.0.20 + PHP で名前が入ったテーブルよりLIKEを使って検索すると全然関係のない名前まで引っ張ってきます。 SELECT * FROM `lady` WHERE name LIKE 'らむ' 上記で検索すると 「とも」って名前まで引っ張ってきます。 SELECT * FROM `lady` WHERE name LIKE 'らな' だと 「るる」って名前も引っ張ります。 どうも「ら行」の検索がうまく出来ないようです。 何か回避方法はあるのでしょうか? よろしく御願いします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1、#2回答者です。 文字コードが「latin1」になっており、これでは日本語が正しく扱われません。 OSがWindows系なら「sjis」、UNIX/LINUX系なら「ujis」にする必要があります。 「MySQL 4.0 日本語」等で検索すれば、設定方法などの記載がたくさんヒットします。 一例を、参考URLに書いておきます。
その他の回答 (2)
- chukenkenkou
- ベストアンサー率43% (833/1926)
#1回答者です。 文字コードの指定は、どうなっているのでしょうか? statusコマンドでの表示結果を、追記できますか?
お礼
お返事ありがとう御座います。 mysql Ver 12.22 Distrib 4.0.20, for pc-linux (i686) Connection id: 77308318 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Server version: 4.0.20-log Protocol version: 10 Connection: Localhost via UNIX socket Client characterset: latin1 Server characterset: latin1 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 47 days 9 hours 8 min 7 sec Threads: 1 Questions: 991042097 Slow queries: 0 Opens: 2505 Flush tables: 1 Open tables: 36 Queries per second avg: 242.090 これで宜しかったでしょうか?。
- chukenkenkou
- ベストアンサー率43% (833/1926)
補足説明をお願いします。 1.name列の定義は、どういうデータ型ですか? char(4)? varchar(4)? それ以外? 2.インデクスの有無は? 3.等価なその他の検索条件では発生しませんよね? (1)where name='らむ'では発生しませんよね? (2)where substr(name,1,4)='らむ'でも発生しませんよね? >何か回避方法はあるのでしょうか? 完全一致の検索なら、likeを使う意味はないのでは? =条件にできないのでしょうか?
お礼
早速の回答ありがとう御座います。 すいません言葉足らずで、補足としまして 1.varchar(64) 2.インデックスはありません 3.(1)等価でも発生します SELECT * FROM `lady` WHERE name = 'らむ' でも「とも」がヒットします。 (2)は試していません。 >完全一致の検索なら、likeを使う意味はないのでは? =条件にできないのでしょうか? 完全一致の検索ではありません。 よろしく御願いします。
お礼
ありがとう御座います。 やっぱり文字コードの関係だったのですね^^; 参考URLを見て試してみます。 本当にありがとう御座いました。