MySQLの文字コードで、「utf8_general_ci」と「utf8_unicode_ci」という似たものがあるが、何が違うのか調べてみました。
結論から言うと、日本語のWebサイトを作る場合は、 utf8_general_ci にしておくのが無難なようです。
文字コード | 拡張のサポート |
utf8_unicode_ci | 拡張をサポートしている |
utf8_general_ci | 拡張をサポートしない |
utf8_unicode_ci主な特徴は、拡張をサポートしていることです。それは1つの文字が他の文字のコンビネーションと等価であると比較された場合です。例えば、ドイツ語や他の言語では、‘ß’ は‘ss’に相当します。
utf8_general_ciは拡張をサポートしないレガシー照合順序です。文字間で1対1の比較しかできません。つまり、utf8_general_ci照合順序に対する比較の方が早いが、utf8_unicode_ciに比べてわずかに正確性が劣ります。
utf8_unicode_ciの場合は全文検索時に半角カタカナ=>全角カタカナやひらがな=>カタカナのマッチングが可能みたいですよ
utf8_unicode_ciでLIKEを使うと、ひらがなカタカナができますね。
MySQLでutf8を指定するときに、
(たぶん)一般的には以下の2つのうちいずれかを用いると思います。
・utf8-general-ci(デフォルト)
・utf8-unicode-ci
で、今回のメモで残したいことは、
このとき、日本語を使うなら必ず
・utf8-general-ci
を使いましょうってこと。
それぞれのキャラクタセットの違いは、
・utf8-general-ci:比較条件の拡張なし
・utf8-unicode-ci:比較条件の拡張あり
のみなんで、MySQLの公式では、
utf8-unicode-ciを使いましょうみたいなことが書いてありますので、
「じゃぁ・・・」、ということで、
ローカルの環境(windows)でutf8-unicode-ciを設定したら、
ひらがなの「ほ」で条件を指定したのに、
「ぼ」や「ボ」や「ホ」といったものに一致するという珍事にはまってしまったためです。
Geeklog1.4.0, 1.4.1,1.5.0,1.5.1からGeeklog1.5.2にアップグレードする方法によると
utf8_unicode_ciにすると,~や機種依存文字の①②がすべて ? に置き換わってしまいます。
ということなのでutf8_general_ciに統一した。
データベースをutf-8,unicode_general
データベースを以下のモードに変更してください。
・MySQLの文字セット: UTF-8 Unicode (utf8)
・MySQL 接続照会順序: utf8_general_ci
注意:
utf8_unicode_ciにすると,~や機種依存文字の①②がすべて ? に置き換わってしまいます。