utf8mb4_default
??你在哪里看到这个?
utf8mb4 的默认排序规则(MySQL 8.0 之前)是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 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 种不同的治疗方法Æ
and æ
.
- 这两个连字被同等对待(“不区分大小写”)。
-
general不会将其排序在其他 A 附近。 (在下面很远的地方,我们看到它们按照
Z
.)
-
unicode将它们排序在所有 A 之后、B 之前,就好像它们是一个单独的“字母”一样。
-
unicode_520将它们视为等于字母对
ae
.
对于 5.7,并且没有任何特定的语言要求,我会使用utf8mb4_unicode_520_ci
.
回到你的“为什么”问题。更改默认设置可能会带来对现有安装的损害大于其帮助的风险。所以,我猜设计师是保守的。另一方面,8.0 有很多重大变化,因此不愿意改变的情况较少。因此,迁移到 utf8mb4_0900_ai_ci。