请帮助我了解mysql workbench中列出的排序规则之间的差异: utf8mb4_unicode_ci 与 utf8mb4 - default collation p、 每个人都建议使用 utf8mb4_unicode_ci . 如果这是如此流行,为什么它不是默认的?它与默认值有什么不同?我使用mysql 5.7.21。
utf8mb4_unicode_ci
utf8mb4 - default collation
gzszwxb41#
utf8mb4_default ?? 你在哪里看到这个?utf8mb4的默认排序规则(在mysql 8.0之前)是utf8mb4\u general\u 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”对该页提供的信息的作用相同。)首先要注意:
utf8mb4_default
ss
ß
utf8mb4_unicode_520_ci
utf8mb4_0900_ai_ci
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_将它们视为等同于字母对 ae .对于5.7,并且没有任何特定的语言要求,我将使用 utf8mb4_unicode_520_ci .回到你的问题“为什么”。更改默认值可能会对现有安装造成更大的伤害,而不是帮助。所以,我猜,设计师是保守的。另一方面,8.0有很多重大的变化,所以不太愿意改变。因此,移动到utf8mb4\u 0900\u ai\u ci。
Æ
æ
Z
ae
1条答案
按热度按时间gzszwxb41#
utf8mb4_default
?? 你在哪里看到这个?utf8mb4的默认排序规则(在mysql 8.0之前)是utf8mb4\u general\u 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”对该页提供的信息的作用相同。)首先要注意:
这三条线指出了三种不同的治疗方法
Æ
以及æ
.这两个连字被同等对待(“不区分大小写”)。
将军不会把它放在其他a的附近(在下面的远处,我们看到他们在分类
Z
.)unicode将它们排列在a之后,b之前,就好像它们是一个单独的“字母”。
_unicode_520_将它们视为等同于字母对
ae
.对于5.7,并且没有任何特定的语言要求,我将使用
utf8mb4_unicode_520_ci
.回到你的问题“为什么”。更改默认值可能会对现有安装造成更大的伤害,而不是帮助。所以,我猜,设计师是保守的。另一方面,8.0有很多重大的变化,所以不太愿意改变。因此,移动到utf8mb4\u 0900\u ai\u ci。