« 今学期は真面目にいけるのではないか | メイン | カルビクッパが美味しい »

2006年12月04日

utf8_general_ci と utf8_unicode_ci の違い

以前までは、データベース MySQL を利用したアプリケーションを作るときは、文字コードとして EUC-JP を利用していました。最近は、国際化との兼ね合いなどから UTF-8 を利用するようにしています。

MySQL で UTF-8 を扱う場合、照会順序として utf8_bin を使用していました(何も考えずに)。

utf8_bin の場合、部分一致探索 LIKE などの使用時に英字の大文字小文字が区別されてしまう。大文字小文字を区別されないようにするためには、照会順序として utf8_general_ci を使用すればよいのですが、他にも utf8_unicode_ci があることに気がつきました。

utf8_general_ci と utf8_unicode_ci では、どこが違うのだろう?

utf8_general_ci also is satisfactory for both German and French, except that ‘ß’ is equal to ‘s’, and not to ‘ss’. If this is acceptable for your application, then you should use utf8_general_ci because it is faster. Otherwise, use utf8_unicode_ci because it is more accurate.

探索等において、文字列照合の正確性と速度のトレードオフのようですね。正確性を重視するのであれば utf8_unicode_ci を使用して、速度を重視するのであれば utf8_general_ci を使用すればいいみたい。

この場合における「正確性」というのは、特定の文字に対するマッチする文字が増えるということを指すようです。アジア言語で言えば、中国の漢字を「日本の似ている漢字」でマッチさせることを指すのだろうか。

日本語を主とする場合は、良く使われている utf8_general_ci でいいか。あれ?日本語における旧字の取り扱いはどうなるのだろう。

【関連情報】
・10.10.1. Unicode Character Sets - MySQL 3.23, 4.0, 4.1 Reference Manual
 http://dev.mysql.com/doc/refman/4.1/en/charset-unicode-sets.html

2006年12月04日 12:49 | Technology

トラックバック

コメント

ユーザーIDとかが大文字、小文字が混ざってたらbinですね。

http://pentan.info/mobile/get_uid.html

投稿者 : 2009年01月30日 02:58

utf8_unicode_ciの場合は全文検索時に半角カタカナ=>全角カタカナやひらがな=>カタカナのマッチングが可能みたいですよ

LIKE検索の場合は未確認。

投稿者 Araki : 2009年03月25日 10:28

utf8_unicode_ciでLIKEを使うと、ひらがなカタカナができますね。

投稿者 ぽ : 2009年12月29日 01:47