Mar 11, 2006

MySQLでのLIKEとREGEXPの挙動

MySQLの保存文字エンコードがEUCで、PHPスクリプトがEUCである。
これで検索スクリプトを作っていて、パターンマッチング演算子「LIKE」を使っていたのだが、どうも変な感じでヒットする。たとえば魚へんの「鱒」で「鱗造」がヒットしてしまうのだ。これが長い文字列なら問題ないので、まあいいかと思っていて、ふと正規表現によるパターンマッチング演算子「REGEXP」を使ったらまったく問題なく検索されることがわかった。
つまり、
$sql .= " WHERE (bbs_msg LIKE '%".cnv_sqlstr($key)."%')";
ではなくて、
$sql .= " WHERE (bbs_msg REGEXP '".cnv_sqlstr($key)."')";
を使えば問題ない。
内部エンコードがutf-8でスクリプトがutf-8なら「LIKE」でも問題がないかもしれないと想像する。ウチのMySQLはEUCでインストールしているので試せない。

WriteBacks
TrackBack ping me at
http://haizara.net/~shimirin/blosxom/blosxom.cgi/computer/linux/20060311014956.trackback
Post a comment

writeback message: Ready to post a comment.













Captcha:
To prevent comment spam, please retype the characters in this image:

Enter the text here: