web-dev-qa-db-ja.com

MySQL照合:utf8mb4_unicode_ciと「utf8mb4-デフォルトの照合」

MySQLWorkbenchにリストされている照合順序の違いを理解するのを手伝ってください。

utf8mb4_unicode_ci vs utf8mb4 - default collation

p.s.誰もがutf8mb4_unicode_ciの使用を推奨しています。これが非常に人気がある場合、なぜデフォルトではないのですか?デフォルトと何が違うのですか?

MySQL5.7.21を使用しています。

MySQL Workbench

5

utf8mb4_default ??これはどこにありますか?

Utf8mb4のデフォルトの照合順序はutf8mb4_general_ciです。これは一度に1バイトのみをチェックするため、ssßと等しいとは見なされません。 utf8mb4の他の照合のほとんどは、それらが等しいと見なします。

(スペイン語固有などではなく)一般的な使用のための「より良い」照合のリストの次はutf8mb4_unicode_ciです。これは、数年前に作成されたUnicode照合アルゴリズムバージョン4.0と一致します。

次に、utf8mb4_unicode_520_ci(Unicode 5.20)が登場します。これは、より多くのことを「正しく」処理します。

MySQL 8.0にアクセスすると、9.0バージョンのutf8mb4_0900_ai_ciがあります。

違いの詳細については、 http://mysql.rjweb.org/utf8_collat​​ions.html を参照してください。 (注:「utf8」と「utf8mb4」は、そのページで提供される情報に対して同じように機能します。)最初に注意すること:

utf8_general_ci              A=a=À=Á=Â=Ã=Ä=Å=à=á=â=ã=ä=å=Ā=ā=Ą=ą    Aa  ae          az
utf8_unicode_ci              A=a=ª=À=Á=Â=Ã=Ä=Å=à=á=â=ã=ä=å=Ā=ā=Ą=ą  Aa  ae          az            Æ=æ
utf8_unicode_520_ci          A=a=ª=À=Á=Â=Ã=Ä=Å=à=á=â=ã=ä=å=Ā=ā=Ą=ą  Aa  ae=Æ=æ      az

これらの3行は、Ææの3つの異なる処理を示しています。

  • これらの2つの結紮は同等に扱われます(「大文字と小文字を区別しない」)。
  • generalは、他のAの近くではソートしません。 (以下では、Zの後にソートされていることがわかります。)
  • unicodeは、すべてのAの後、Bの直前で、それらが別個の「文字」であるかのように並べ替えます。
  • _unicode_520_は、それらを文字ペアaeと等しいものとして扱います。

5.7の場合、特定の言語要件がなければ、utf8mb4_unicode_520_ciを使用します。

「なぜ」という質問に戻りましょう。デフォルトを変更すると、既存のインストールに役立つ以上の損害を与えるリスクがあります。ですから、デザイナーは保守的だったと思います。一方、8.0には大きな変更がたくさんあるので、変更することへの抵抗は少なくなりました。したがって、utf8mb4_0900_ai_ciに移動します。

8
Rick James