MySQL 排序规则名称遵循以下约定
排序规则名称以与其关联的字符集的名称开头,通常后跟一个或多个后缀,表示其他排序规则特征。例如,
utf8mb4_0900_ai_ci
和latin1_swedish_ci
分别是utf8mb4
和latin1
字符集的排序规则。binary
字符集只有一个排序规则,也称为binary
,没有后缀。特定于语言的排序规则包含区域设置代码或语言名称。例如,
utf8mb4_tr_0900_ai_ci
和utf8mb4_hu_0900_ai_ci
使用土耳其语和匈牙利语的规则分别对utf8mb4
字符集中的字符进行排序。utf8mb4_turkish_ci
和utf8mb4_hungarian_ci
类似,但基于 Unicode 排序算法的较早版本。排序规则后缀表示排序规则是区分大小写、区分重音、区分假名(或其某种组合)还是二进制。下表显示了用于表示这些特征的后缀。
对于不指定重音敏感性的非二进制排序规则名称,它由大小写敏感性确定。如果排序规则名称不包含
_ai
或_as
,则名称中的_ci
意味着_ai
,而名称中的_cs
意味着_as
。例如,latin1_general_ci
明确地不区分大小写,并且隐含地不区分重音,latin1_general_cs
明确地区分大小写,并且隐含地区分重音,而utf8mb4_0900_ai_ci
明确地不区分大小写,并且不区分重音。对于日语排序规则,
_ks
后缀表示排序规则区分假名;也就是说,它区分片假名字符和平假名字符。没有_ks
后缀的日语排序规则不区分假名,并且在排序时将片假名和平假名字符视为相等。对于
binary
字符集的binary
排序规则,比较基于数字字节值。对于非二进制字符集的_bin
排序规则,比较基于数字字符代码值,对于多字节字符,它与字节值不同。有关binary
字符集的binary
排序规则与非二进制字符集的_bin
排序规则之间差异的信息,请参阅 第 12.8.5 节,“二进制排序规则与 _bin 排序规则的比较”。Unicode 字符集的排序规则名称可能包含版本号,以表示排序规则基于的 Unicode 排序算法 (UCA) 版本。没有名称中版本号的基于 UCA 的排序规则使用版本 4.0.0 UCA 权重键。例如
utf8mb4_0900_ai_ci
基于 UCA 9.0.0 权重键 (http://www.unicode.org/Public/UCA/9.0.0/allkeys.txt).utf8mb4_unicode_520_ci
基于 UCA 5.2.0 权重键 (http://www.unicode.org/Public/UCA/5.2.0/allkeys.txt).utf8mb4_unicode_ci
(没有命名的版本)基于 UCA 4.0.0 权重键 (http://www.unicode.org/Public/UCA/4.0.0/allkeys-4.0.0.txt).
对于 Unicode 字符集,
排序规则保留了原始xxx
_general_mysql500_ci
排序规则在 5.1.24 之前的排序,并允许升级在 MySQL 5.1.24 之前创建的表(错误 #27877)。xxx
_general_ci