代码之家  ›  专栏  ›  技术社区  ›  Yevgeniy Afanasyev

mysql排序规则:utf8mb4_unicode_ci vs“utf8mb4-默认排序规则”

  •  2
  • Yevgeniy Afanasyev  · 技术社区  · 7 年前

    请帮助我了解MySQL Workbench中列出的排序规则之间的区别:

    utf8mb4_unicode_ci VS utf8mb4 - default collation

    P.S.每个人都建议使用 utf8mb4_unicode_ci . 如果这很流行,为什么不默认呢?它与默认值有什么不同?

    我使用MySQL5.7.21。

    MySQL Workbench

    1 回复  |  直到 6 年前
        1
  •  5
  •   Rick James diyism    7 年前

    utf8mb4_default ?你在哪里看到这个?

    utf8mb4的默认排序规则是utf8mb4_-general_-ci。一次只检查一个字节,所以 ss 不等于 ß . UTF8MB4的大多数其他排序规则都认为它们是相等的。

    “更好”排序列表中的下一个用于一般用途(而不是特定于西班牙语等)的是 utf8mb4_unicode_ci . 这与几年前编写的Unicode排序规则算法4.0版相匹配。

    然后就来了 utf8mb4_unicode_520_ci (Unicode 5.20),它可以正确处理更多的事情。

    当你进入MySQL8.0时,会有一个9.0版本。 utf8mb4_0900_ai_ci .

    有关差异的详细信息,请参阅 http://mysql.rjweb.org/utf8_collations.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
    

    这三条线指出了 Æ æ .

    • 这两个韧带被同等对待(“不区分大小写”)。
    • 一般的 不会在靠近其他A的地方排序。(在下面,我们看到他们在排序 Z )
    • Unicode码 把它们排序在所有a的后面,就在b的前面,好像它们是一个单独的“字母”。
    • _ Unicode_520_u将它们视为等同于字母对 ae .

    对于5.7,如果没有任何特定的语言要求,我将使用 utf8mb4_unicode_520_ci .

    回到你的“为什么”问题。更改默认值会带来损害现有安装的风险,而不仅仅是帮助。所以,我想,设计师们是保守的。另一方面,8.0有很多重大的变化,所以不太愿意改变。因此,移动到utf8mb4_0900_ai_ci。

    推荐文章