MySQL排序规则:utf8mb4_unicode_ci vs utf8mb4_default

时间:2018-07-11 06:19:41

标签: mysql collation

请帮助我找出mysql归类之间的区别:

utf8mb4_unicode_ciutf8mb4_default

P.S。每个人都建议使用utf8mb4_unicode_ci。如果它如此流行,为什么不默认它呢?与默认设置有何不同?

我使用MYSQL 5.7.21

谢谢。 enter image description here

1 个答案:

答案 0 :(得分:3)

utf8mb4_default?您在哪里看到这个?

utf8mb4的默认排序规则是utf8mb4_general_ci。这一次仅检查一个字节,因此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_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

这3行指出Ææ的3种不同处理方式。

  • 将这两个连字视为相等(“不区分大小写”)。
  • general 不会对其他A附近的任何地方进行排序。 (下面,我们看到它们排在Z之后。)
  • unicode 将它们排在所有A之后,紧接在B之前,就好像它们是单独的“字母”一样。
  • _unicode_520_将它们等同于字母对ae

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

回到您的“为什么”问题。更改默认值会带来损害现有安装的风险,而这无济于事。所以,我想设计师是保守的。另一方面,8.0有很多重大更改,因此不太愿意更改。因此,转到utf8mb4_0900_ai_ci。