サイトを作っているときに「照合順序をutf8_unicode_ciにしてキーワード検索で、ひらがなでもカタカナでも検索にヒットするようにして」と言われたことがあり、「照合順序ってなんだっけ?」となったのでメモ。

照合順序の特徴

MySQLには「文字コード」と「ソート」の設定があり、ソートの部分を照合順序(Collation:コレイション)と言います。照合順序は、大文字と小文字を区別するかどうかなどソートのルールを決めています。

調べたところ、以下のような特徴があるようです。

  • 比較するときには文字コードだけでなく、照合順序が合わないとJOIN出来ない
  • DB、テーブル、カラム単位での設定が可能

照合順序の種類

MySQLでUTF-8で、日本語を扱う場合に使用可能な照合順序は以下のものがあります。

・utf8_bin
全て区別します。

・utf8_general_ci
アルファベットの大文字小文字は区別しませんが、他は全て区別します。

・utf8_unicode_ci
大文字小文字、全角半角、濁音、半濁音、ひらがな、カタカナを区別しません。

つまり、最初の「照合順序をutf8_unicode_ciにしてキーワード検索で、平仮名でもカタカナでも検索にヒットするようにして。」というのは、utf8_unicode_ciだから出来る仕様だったのかと理解しました。

utf8_unicode_ciの問題点

曖昧検索が出来るので便利ですが、例えば「パパ」を検索すると「ハハ」がヒットするという問題もあるため、検索精度は落ちます。扱いには注意が必要です。