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
    1. ponnao-clip - utf8_general_ciとutf8_unicode_ciの違い - pingback on 2010/2/23 火曜日 at 11:17:45
    2. 『utf8_generic_ciだとマッチする文字が増えるかもですよ、と。』じゃなくて、
      『utf8_unicode_ciだとマッチする文字が増えるかもですよ、と。』でしょうか?

    Leave a Comment


    NOTE - You can use these HTML tags and attributes:
    <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

    Trackbacks and Pingbacks: