[[MySQL]]

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

#contents

* 結論 [#sbecef3a]
結論から言うと、日本語のWebサイトを作る場合は、&color(red){ utf8_general_ci };にしておくのが無難なようです。

|文字コード|拡張のサポート|h
|utf8_unicode_ci|拡張をサポートしている|
|utf8_general_ci|拡張をサポートしない|

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

* 参考 [#u3c2502b]

- 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
・MySQLの文字セット: UTF-8 Unicode (utf8)
・MySQL 接続照会順序: utf8_general_ci
注意:
utf8_unicode_ciにすると,~や機種依存文字の①②がすべて ? に置き換わってしまいます。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS