mysqlのutf照合順序のメモ

utf8_bin

特徴

完全一致のみ

  • utf8…文字コードは UTF8 で判断しますよ!
  • bin…バイナリ判定(大文字と小文字は違う文字ですよ!全角と半角も違う文字ですよ!)

utf8_general_ci

特徴

拡張をサポートしない。

  • utf8…文字コードは UTF8 で判断する
  • general…大文字と小文字を同じ文字として扱い、全角と半角も区別する
  • ci…Case Insensitive(大文字と小文字を識別しませんよ!)

utf8_unicode_ci

特徴

拡張をサポートする。
半角カタカナ=>全角カタカナやひらがな=>カタカナのマッチングが可能。

  • utf8…文字コードは UTF8 で判断する
  • unicode…大文字と小文字を同じ文字として扱い、全角と半角は区別しない
  • ci…Case Insensitive(大文字と小文字を識別しませんよ!)

濁音、半濁音、ひらがな、カタカナも区別しない。
「は」で検索すると「は」「ば」「ぱ」「ハ」「バ」「パ」「ハ」がヒットする。

utf8_unicode_ciのデメリット

日本語の検索で、「ひらがな」「カタカナ」が混在した形でヒットしてしまう。
ひらがなの「ほ」で条件を指定したのに、「ぼ」や「ボ」や「ホ」といったものに一致してしまう。

余談

select時だけ照合順序を区別する方法
SELECTする時に条件として大文字小文字を区別したいのであれば、BINARYオペレータを記述する方法もあります。

1
SELECT * FROM fish WHERE BINARY name = ‘KATSUO’