データベースの照合順序について(utf8_unicode_ciは、なかなかにクレイジーな感じの照合順序)

データベースの照合順序について(utf8_unicode_ciは、なかなかにクレイジーな感じの照合順序)

データベースの照合順序とは、一言で言えば検索する時に「大文字・小文字」を区別するかしないか?
日本語なら、小文字大文字、全角半角、濁音半濁音、カタカナひらがなを区別するかしないか?という設定です。
ソート順も設定する。例えば「がぎぐげご」って「さしすせそ」の前?(ソート的に)
それとも、五十音が全部終わった後か?みたいな。

SQL Serverなら以下の様な、色々な照合順序があるらしい。
_cs(Case Sensitive) = 大文字(UPPER-CASE)と小文字(lower-case)を区別する(Sensitive)
_ci(Case Insensitive) = 大文字(UPPER-CASE)と小文字(lower-case)を区別しない(Insensitive)
_ai(Accent Insensitive) = 「ハ」「バ」「パ」を区別しない(
_ks(Kana Sensitive) = ひらがな・カタカナを区別すr
_ws(Width Sensitive) = 全角・半角を区別する。ZとZは別物
_bin(Binary) = 全て区別する

残念ながら, MySQLでは日本語UTF8の照合順序は3種類だけらしい。
utf8_bin(完全一致のみ)
utf8_general_ci(大文字と小文字を区別しない。他は区別する。これが一般的)
utf8_unicode_ci(大文字と小文字を区別しない上に、「は」に対して「は」「ば」「ぱ」「ハ」「バ」「パ」「ハ」「バ」がマッチする。もちろん逆もしかり)

utf8_unicode_ciは、なかなかにクレイジーな感じの照合順序(汗)
「まつだ(松田)」で検索すると、「まった(待った)」とか普通にヒットする…。
要するに、小文字大文字、全角半角、濁音半濁音、カタカナひらがな、を全て同じものとして扱う!
上記を理解した上で使う分には良いけど、知らないとバグっている!とかなりそう(^_^;)

参考HP
http://qiita.com/Vit-Symty/items/159c27d7d62c78ee9ce7