開発するうえで調べたこと、知ったことを備忘録としてメモメモ!

utf8_general_ciとutf8_unicode_ci

utf8_general_ciとutf8_unicode_ciの違いは主に以下。
  • utf8_general_ci
    • 英字の大文字小文字は区別しない。
    • 全角半角は区別する。
  • utf8_unicode_ci
    • 英字の大文字小文字は区別しない。
    • 全角半角も区別しない。
    • さらに濁音、半濁音、ひらがな、カタカナも区別しない。
    • 「は」で検索すると「は」「ば」「ぱ」「ハ」「バ」「パ」「ハ」がヒットする。

ちなみに全てを区別したい場合はutf8_binを使用すればよい。
  • 落とし穴
「'」シングルクォート、「"」ダブルクォートの全角半角は同一視しないようです。

utf8_unicode_ciの同一視文字は、strings/ctype-uca.c で定義されている。
http://d.hatena.ne.jp/end0tknr/20100613/1276427626

MySQL 5.5.11 unicode_ci で同一視される文字
http://tmtm.org/tmp/mysql_unicode_collation.html

以下検証結果

半角「1」

utf8_general_ci
mysql> select general from charaset_test where general = '1';
+---------+
| general |
+---------+
| 1       |
+---------+
1 row in set (0.00 sec)
utf8_unicode_ci
mysql> select unicode from charaset_test where unicode = '1';
+---------+
| unicode |
+---------+
| 1       |
| 1      |
|       |
+---------+
3 rows in set (0.00 sec)

半角「a」

utf8_general_ci
mysql> select general from charaset_test where general = 'a';
+---------+
| general |
+---------+
| a       |
| A       |
+---------+
2 rows in set (0.00 sec)
utf8_unicode_ci
mysql> select unicode from charaset_test where unicode = 'a';
+---------+
| unicode |
+---------+
| a       |
| A       |
| a      |
| A      |
+---------+
4 rows in set (0.00 sec)

全角「は」

utf8_general_ci
mysql> select general from charaset_test where general = 'は';
+---------+
| general |
+---------+
| は      |
+---------+
1 row in set (0.00 sec)
utf8_unicode_ci
mysql> select unicode from charaset_test where unicode = 'は';
+---------+
| unicode |
+---------+
| は      |
| ば      |
| ぱ      |
| ハ      |
| バ      |
| パ      |
| ハ       |
| バ      |
| パ      |
+---------+
9 rows in set (0.00 sec)

このページへのコメント

WyDL7u Say, you got a nice blog. Really Great.

0
Posted by stunning seo guys 2014年01月22日(水) 13:22:37 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

×

この広告は60日間更新がないwikiに表示されております。

メンバーのみ編集できます