2017.06.26
【MySQL】LIKE検索で濁点、半濁点を区別したい
MySQLでLIKE検索を行うと濁点、半濁点の区別をしません。
例えば「コ」のつく都道府県を検索したいとします。
実は「コ」が付く都道府県は1つしかありません。
いったいどこだと思います?
正解は「高知県」です!!
まあそれは置いておいて、以下のSQLでは私が想定した結果になりませんでした。
SELECT * FROM prefecture WHERE like kana LIKE '%コ%;
このSQLだと
- 兵庫県
- 高知県
- 鹿児島県
の3つがヒットします。
そうです。ヒョウゴの「ゴ」とカゴシマも「ゴ」も条件に引っかかってしまっているのです。
もし濁点、半濁点を区別して検索したい場合は「BINARY演算子」を使用することで解決できます。
SELECT * FROM prefecture WHERE like kana LIKE BINARY '%コ%;
Mysqlの公式リファレンスによると、
BINARY 演算子は、それに続く文字列をバイナリ文字列にキャストします。これは、比較を文字ごとでなくバイトごとに強制的に実行させる簡単な方法です
と書かれています。
バイト単位での比較になるので濁点、半濁点の区別ができるようですね。
ただし、当然ながら文字コードが同一されていないと正確な検索が行なえませんので注意してください。
SQLが学べる 関連連載リンク
データベースの基礎が学べるSQL基礎講座
SQL基礎 連載
練習問題を通じてSQL理解度アップの人気連載!
SQL練習問題集