MySQLと文字コードと

まじめも:collationでUTF8日本語を使う場合、候補にutf8_general_ciとutf8_unicode_ciのどちらを選ぶか迷う事がある

これについては、
MySQL5.5ユニコードキャラクタセットの説明
の中程に

For any Unicode character set, operations performed using the xxx_general_ci collation are faster than those for the xxx_unicode_ci collation.

A difference between the collations is that this is true for utf8_general_ci:
ß = s
Whereas this is true for utf8_unicode_ci, which supports the German DIN-1 ordering (also known as dictionary order):
ß = ss

generalはunicodeに比べて高速だと書かれている。
挙動の違いとして、上記エスツェット(ドイツ語拡張文字)の違いが挙げられているが、現在の書法ではss(unicodeの挙動)が正しい。
しかし、日本語の扱いの違いが上げられていないが、実際に評価すると以下の様な挙動を示す。

test_table
id name
1 ユニコード
2 ゆにこーど
SELECT * FROM test_table WHERE name LIKE ‘%ゆにこーど%’;
collation設定 id name
unicode 1 ユニコード
2 ゆにこーど
general 2 ゆにこーど

utf8_unicode_ciにすると、なんとカタカナとひらがな表記が同じであると判定されてしまうのだ。
これだと、実運用上問題が生じることが多いだろうから、一般的には、utf8_unicode_ciではなくutf8_general_ciを使う様にした方がいい。

(301)


カテゴリー: LAMP[Linux, Apache, MySQL, PHP], MySQL   パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です