【发布时间】:2023-03-22 00:48:01
【问题描述】:
我登录 MariaDB/MySQL 并输入:
SHOW COLLATION;
我在可用的排序规则中看到了utf8mb4_unicode_ci 和utf8mb4_unicode_520_ci。这两个排序规则有什么区别,我们应该使用哪个排序规则?
【问题讨论】:
标签: mysql unicode mariadb collation
我登录 MariaDB/MySQL 并输入:
SHOW COLLATION;
我在可用的排序规则中看到了utf8mb4_unicode_ci 和utf8mb4_unicode_520_ci。这两个排序规则有什么区别,我们应该使用哪个排序规则?
【问题讨论】:
标签: mysql unicode mariadb collation
好吧,您可以阅读文档中的差异。我不能告诉你应该使用什么,因为每个项目都不一样。
10.1.3 排序规则命名约定
MySQL 排序规则名称遵循以下约定:
排序规则名称以字符集的名称开头 它是关联的,后跟一个或多个表示其他的后缀 整理特征。例如,utf8_general_ci 和 latin_swedish_ci 是 utf8 和 latin1 字符的排序规则 分别设置。
特定于语言的排序规则包括语言名称。例如, utf8_turkish_ci 和 utf8_hungarian_ci 为 utf8 排序字符 分别使用土耳其语和匈牙利语规则的字符集。
排序区分大小写由_ci(不区分大小写)表示, _cs(区分大小写)或 _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 排序规则保留 5.1.24 之前的原始 xxx_general_ci 排序规则和 允许升级在 MySQL 5.1.24 之前创建的表。更多 信息,请参阅第 2.11.3 节,“检查表或索引 必须重建”和第 2.11.4 节,“重建或修复表 或索引”。
【讨论】:
我会开发@StuiterSlurf的答案,重点关注utf8mb4_unicode_ci/utf8mb4_unicode_520_ci的细节:
如您所见here (Peter Gulutzan) 排序/比较波兰字母“Ł”(带笔划的 L)(小写:“ł”;html esc:@ 987654325@ 和 Ł ) - 我们在编码中有以下假设(与 mb4 相同):
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 之前。对于不同的编码系统,您会得到不同的排序结果。这种编码没有一个更好或更坏 - 这取决于您的需求。
【讨论】:
要查看更多关于实际差异的讨论,您可以转到 https://dev.mysql.com/worklog/task/?id=2673 并单击“高级架构”。
【讨论】: