MySQLの文字コードで、「utf8_general_ci」と「utf8_unicode_ci」という似たものがあるが、何が違うのか調べてみました。
結論 †
結論から言うと、日本語のWebサイトを作る場合は、 utf8_general_ci にしておくのが無難なようです。
文字コード | 拡張のサポート |
utf8_unicode_ci | 拡張をサポートしている |
utf8_general_ci | 拡張をサポートしない |
- utf8_unicode_ciのデメリット
- 日本語の検索で、「ひらがな」「カタカナ」が混在した形でヒットしてしまう。
=余計な結果は要らん! - 文字化けが起こる場合があるらしい。
=「~」(波ダッシュ)とか?
参考 †
- mysql utf8_unicode_ci utf8_general_ci - Google 検索
https://www.google.co.jp/#q=mysql+utf8_unicode_ci+utf8_general_ci
- MySQL :: MySQL 5.1 リファレンスマニュアル :: 9.10.1 Unicode キャラクタセット http://dev.mysql.com/doc/refman/5.1/ja/charset-unicode-sets.html#http://dev.mysql.com/doc/refman/5.1/ja/charset-unicode-sets.html
- MySQLにおける、utf8_general_ci と utf8_unicode_ci の違いとは何か。 | PHPの種 ブログ (2007/10/31)
http://www.php-seed.net/blog/archives/129
utf8_unicode_ci主な特徴は、拡張をサポートしていることです。それは1つの文字が他の文字のコンビネーションと等価であると比較された場合です。例えば、ドイツ語や他の言語では、‘ß’ は‘ss’に相当します。
utf8_general_ciは拡張をサポートしないレガシー照合順序です。文字間で1対1の比較しかできません。つまり、utf8_general_ci照合順序に対する比較の方が早いが、utf8_unicode_ciに比べてわずかに正確性が劣ります。
- utf8_general_ci と utf8_unicode_ci の違い - Ceekz Logs (吉田光男@筑波の日記) (2006年12月04日)
http://private.ceek.jp/archives/002377.html
utf8_unicode_ciの場合は全文検索時に半角カタカナ=>全角カタカナやひらがな=>カタカナのマッチングが可能みたいですよ
utf8_unicode_ciでLIKEを使うと、ひらがなカタカナができますね。
- mysql 日本語&utf-8ではutf8-general-ciにしましょう - 毎日漫然な愚者 (2009-06-08)
http://blog.goo.ne.jp/gusyazero/e/0fa3848ea72a933108de91dca3db53c5
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を設定したら、
ひらがなの「ほ」で条件を指定したのに、
「ぼ」や「ボ」や「ホ」といったものに一致するという珍事にはまってしまったためです。
- mysql の utf8_general_ci と utf8_unicode_ci の混在でエラー | とりあえず残しとくか (2010年4月19日)
http://tech.tenki.cc/archives/36
Geeklog1.4.0, 1.4.1,1.5.0,1.5.1からGeeklog1.5.2にアップグレードする方法によると
utf8_unicode_ciにすると,~や機種依存文字の①②がすべて ? に置き換わってしまいます。
ということなのでutf8_general_ciに統一した。
- アップグレード方法 - GeeklogJpWiki (2011年8月29日)
http://wiki.geeklog.jp/index.php?title=%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89%E6%96%B9%E6%B3%95
データベースをutf-8,unicode_general
データベースを以下のモードに変更してください。
・MySQLの文字セット: UTF-8 Unicode (utf8)
・MySQL 接続照会順序: utf8_general_ci
注意:
utf8_unicode_ciにすると,~や機種依存文字の①②がすべて ? に置き換わってしまいます。