MySQLにおける、utf8_general_ci と utf8_unicode_ci の違いとは何か。

MySQLの照合順序における、utf8_general_ci と utf8_unicode_ci の違いとは何か。よくわからなかったのでマニュアルを紐解くと、MySQL AB :: MySQL 5.1 リファレンスマニュアル :: 9.10.1 Unicode キャラクタセットにて、こう書かれています。

現在、utf8_unicode_ci照合順序はUnicode 照合順序アルゴリズムを部分的にのみサポートしています。中にはまだサポートされていない文字もあります。また、結合マークは完全にはサポートされていません。このことはベトナム語を中心に、ロシア内のマイノリティ言語に影響します。

utf8_unicode_ci主な特徴は、拡張をサポートしていることです。それは1つの文字が他の文字のコンビネーションと等価であると比較された場合です。例えば、ドイツ語や他の言語では、‘ß’ は‘ss’に相当します。

utf8_general_ciは拡張をサポートしないレガシー照合順序です。文字間で1対1の比較しかできません。つまり、utf8_general_ci照合順序に対する比較の方が早いが、utf8_unicode_ciに比べてわずかに正確性が劣ります。

utf8_generic_ciだとマッチする文字が増えるかもですよ、と。

例えば、以下の等式がutf8_general_ciとutf8_unicode_ciにおいて証明されます。

Ä = A
Ö = O
Ü = U

照合順序間の違いはutf8_general_ciに対して有効です。

ß = s

utf8_unicode_ciにとって有効である場合:

ß = ss

実際のところ、日本語2byteの場合はどうなんでしょうか。genericで困ったという話も聞きませんが。。

参考ページ

  • http://private.ceek.jp/archives/002377.html