MySQL排序规则:utf8mb4_unicode_ci与“ utf8mb4-默认排序规则”

Yev*_*yev 4 mysql collation mysql-workbench

请帮助我了解MySQL Workbench中列出的归类之间的区别:

utf8mb4_unicode_ciutf8mb4 - default collation

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

我使用MySQL 5.7.21。

MySQL工作台

Ric*_*mes 7

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_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
Run Code Online (Sandbox Code Playgroud)

这3行指出Æ和的3种不同处理æ

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

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

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

  • 感谢您的回答,请查看我附加到问题中的图片。 (2认同)