MySQL

MySQLの文字コードで、「utf8_general_ci」と「utf8_unicode_ci」という似たものがあるが、何が違うのか調べてみました。

結論

結論から言うと、日本語のWebサイトを作る場合は、 utf8_general_ci にしておくのが無難なようです。

文字コード拡張のサポート
utf8_unicode_ci拡張をサポートしている
utf8_general_ci拡張をサポートしない
  • utf8_unicode_ciのデメリット
  1. 日本語の検索で、「ひらがな」「カタカナ」が混在した形でヒットしてしまう。
    =余計な結果は要らん!
  2. 文字化けが起こる場合があるらしい。
    =「~」(波ダッシュ)とか?

参考

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にすると,~や機種依存文字の①②がすべて ? に置き換わってしまいます。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-05-13 (日) 11:19:31 (4360d)