MariaDB / MySQL中utf8mb4_unicode_ci和utf8mb4_unicode_520_ci排序之间的区别?

时间:2016-05-18 18:06:58

标签: mysql unicode mariadb collation

我登录MariaDB / MySQL并输入:

SHOW COLLATION;

我在可用的排序规则中看到utf8mb4_unicode_ciutf8mb4_unicode_520_ci。这两个校对之间有什么区别,我们应该使用哪个?

3 个答案:

答案 0 :(得分:27)

那么你需要阅读文档。我无法告诉你应该使用什么因为每个项目都不同。

10.1.3归类命名约定

MySQL排序规则名称遵循以下约定:

归类名称以与其关联的字符集的名称开头,后跟一个或多个后缀,指示其他归类特征。例如,utf8_general_ci和latin_swedish_ci分别是utf8和latin1字符集的排序规则。

特定于语言的排序规则包括语言名称。例如,utf8_turkish_ci和utf8_hungarian_ci分别使用土耳其语和匈牙利语的规则为utf8字符集排序字符。

排序的区分大小写由_ci(不区分大小写),_ cc(区分大小写)或_bin(二进制;字符比较基于字符二进制代码值)表示。例如,latin1_general_ci不区分大小写,latin1_general_cs区分大小写,latin1_bin使用二进制代码值。

对于Unicode,排序规则名称可能包含版本号,以指示排序规则所基于的Unicode排序规则算法(UCA)的版本。名称中没有版本号的基于UCA的排序规则使用版本-4.0.0 UCA权重键。例如:

utf8_unicode_ci(未命名版本)基于UCA 4.0.0权重键>(http://www.unicode.org/Public/UCA/4.0.0/allkeys-4.0.0.txt)。

utf8_unicode_520_ci基于UCA 5.2.0权重键(http://www.unicode.org/Public/UCA/5.2.0/allkeys.txt)。

对于Unicode,xxx_general_mysql500_ci排序规则保留了原始xxx_general_ci排序规则的5.1.24之前的排序,并允许对MySQL 5.1.24之前创建的表进行升级。有关更多信息,请参见第2.11.3节“检查表或索引是否必须重建”,以及第2.11.4节“重建或修复表或索引”。

来源:https://dev.mysql.com/doc/refman/5.6/en/charset-collation-names.html

答案 1 :(得分:4)

要查看有关实际差异的更多讨论,您可以转到https://dev.mysql.com/worklog/task/?id=2673并点击“高级架构”。

答案 2 :(得分:2)

我将提出@StuiterSlurf的答案,并将重点放在utf8mb4_unicode_ci / utf8mb4_unicode_520_ci的细节上:

您可以阅读here Peter Gulutzan ),对波兰字母“Ł”(带有笔触的L)进行排序/比较时存在问题(小写:“ł”; html esc :łŁ)-我们在编码中有以下假设:

utf8_polish_ci      Ł greater than L and less than M
utf8_unicode_ci     Ł greater than L and less than M
utf8_unicode_520_ci Ł equal to L
utf8_general_ci     Ł greater than Z

波兰语字母Ł在字母L之后和M之前。对于不同的编码系统,您将获得不同的排序结果。这种编码的好与坏都没有,这取决于您的需求。