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
字符集的二进制排序,比较基于数字字节值。对于非二进制字符集的_bin
排序,比较基于数字字符代码值,这些值对于多字节字符与字节值不同。关于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
排序的顺序,并允许在 MySQL 5.1.24 之前创建的表的升级(Bug #27877)。xxx
_general_ci