web-dev-qa-db-ja.com

MariaDB / MySQLのutf8mb4_unicode_ciとutf8mb4_unicode_520_ci照合順序の違いは?

MariaDB/MySQLにログインして、以下を入力しました。

SHOW COLLATION;

そうですか utf8mb4_unicode_ciおよびutf8mb4_unicode_520_ci使用可能な照合の中で。これら2つの照合順序の違いは何ですか?どちらを使用する必要がありますか?

24
Flux

さて、ドキュメントを読む必要があります。すべてのプロジェクトが異なるため、何を使用すべきかを説明できません。

10.1.3照合命名規則

MySQL照合名は次の規則に従います。

照合名は、関連付けられている文字セットの名前で始まり、他の照合特性を示す1つ以上の接尾辞が続きます。たとえば、utf8_general_ciおよびlatin_swedish_ciは、それぞれutf8およびlatin1文字セットの照合です。

言語固有の照合には言語名が含まれます。たとえば、utf8_turkish_ciとutf8_hungarian_ciは、それぞれトルコ語とハンガリー語の規則を使用して、utf8文字セットの文字をソートします。

ソートの大文字と小文字の区別は、_ci(大文字と小文字を区別しない)、_ cs(大文字と小文字を区別する)、または_bin(バイナリ、文字比較は文字バイナリコード値に基づいています)で示されます。たとえば、latin1_general_ciは大文字と小文字を区別せず、latin1_general_csは大文字と小文字を区別し、latin1_binはバイナリコード値を使用します。

Unicodeの場合、照合名には、照合が基づくUnicode照合アルゴリズム(UCA)のバージョンを示すバージョン番号が含まれる場合があります。名前にバージョン番号のないUCAベースの照合では、バージョン-4.0.0 UCAウェイトキーを使用します。例えば:

utf8_unicode_ci(名前付きバージョンなし)は、UCA 4.0.0ウェイトキーに基づいています>( http://www.unicode.org/Public/UCA/4.0.0/allkeys-4.0.0.txt )。

utf8_unicode_520_ciは、UCA 5.2.0の重みキーに基づいています( http://www.unicode.org/Public/UCA/5.2.0/allkeys.txt )。

Unicodeの場合、xxx_general_mysql500_ci照合順序は、元のxxx_general_ci照合順序の5.1.24以前の順序を保持し、MySQL 5.1.24より前に作成されたテーブルのアップグレードを許可します。詳細については、セクション2.11.3「テーブルまたはインデックスを再構築する必要があるかどうかの確認」およびセクション2.11.4「テーブルまたはインデックスの再構築または修復」を参照してください。

ソース: https://dev.mysql.com/doc/refman/5.6/en/charset-collat​​ion-names.html

29
StuiterSlurf

@ StuiterSlurf を開発し、utf8mb4_unicode_ci/utf8mb4_unicode_520_ciの詳細に焦点を当てます。

こちらPeter Gulutzan)を読むことができるように、ポリッシュ文字「Ł」のソート/比較に問題があります(ストロークでL )(小文字: "ł"; html esc:łおよびŁ)-コーディングには以下の仮定があります(mb4と同じ):

utf8_polish_ci      Ł greater than L and less than M
utf8_unicode_ci     Ł greater than L and less than M
utf8_unicode_520_ci Ł equal to L
utf8_general_ci     Ł greater than Z

ポーランド語では、文字letterは文字Lの後、Mの前にあります。異なるコーディングシステムでは、異なるソート結果が得られます。このコーディングのどれも良くも悪くもありません-それはあなたのニーズに依存します。

5

実際の違いについてもう少し議論するには、 https://dev.mysql.com/worklog/task/?id=267 にアクセスして、「High Level Architecture」をクリックしてください。

4
Peter Gulutzan