校验规则命名约定
字符集和归类具有四个级别的默认设置:服务器,数据库,表和列。以下各节中的描述可能看起来很复杂,但是在实践中发现多级默认设置会导致自然而明显的结果。
CHARACTER SET
用于指定字符集的子句中。CHARSET
可以用作的同义词CHARACTER SET
。
字符集问题不仅影响数据存储,还影响客户端程序与MySQL服务器之间的通信。如果希望客户端程序使用与默认字符集不同的字符集与服务器通信,则需要指出哪个字符集。例如,要使用utf8mb4
Unicode字符集,请在连接到服务器后发出以下语句:
SET NAMES 'utf8mb4';
有关客户端/服务器通信中与字符集相关的问题的更多信息,请参见“连接字符集和校验规则”。
归类命名约定
MySQL归类名称遵循以下约定:
- 归类名称以与其关联的字符集的名称开头,通常后跟一个或多个后缀以指示其他归类特征。例如,
utf8mb4_general_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校验算法的最新版本。 校验规则后缀指示校验规则是区分大小写,区分重音还是假名敏感(或其某种组合)还是二进制。下表显示了用于指示这些特性的后缀。
表10.1校验规则后缀的含义
后缀 含义 _ai
口音不敏感 _as
口音敏感 _ci
不区分大小写 _cs
区分大小写 _ks
假名敏感 _bin
二元 对于未指定重音符号敏感性的非二进制校验规则名称,由大小写敏感性决定。如果校验规则名称不包含
_ai
或_as
,_ci
则名称中包含_ai
,_cs
名称中包含_as
。例如,latin1_general_ci
显式不区分大小写和不区分latin1_general_cs
重音,utf8mb4_0900_ai_ci
显式不区分大小写和不区分重音,显式不区分大小写和不区分重音。对于日语归类,
_ks
后缀表示归类对假名敏感;也就是说,它将片假名字符与平假名字符区分开。不带_ks
后缀的日语校验规则不区分假名,将片假名和平假名字符等同于校验。对于字符集的
binary
校验binary
,比较基于数字字节值。对于_bin
非二进制字符集的校验,比较基于数字字符代码值,该值不同于多字节字符的字节值。有关之间的差异信息binary
的核对binary
字符集和_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之前的原始xxx_general_ci
校验顺序,并允许对在MySQL 5.1.24之前创建的表进行升级(缺陷号27877)。