• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 校验规则命名约定

    字符集和归类具有四个级别的默认设置:服务器,数据库,表和列。以下各节中的描述可能看起来很复杂,但是在实践中发现多级默认设置会导致自然而明显的结果。

    CHARACTER SET用于指定字符集的子句中。CHARSET可以用作的同义词CHARACTER SET

    字符集问题不仅影响数据存储,还影响客户端程序与MySQL服务器之间的通信。如果希望客户端程序使用与默认字符集不同的字符集与服务器通信,则需要指出哪个字符集。例如,要使用utf8mb4 Unicode字符集,请在连接到服务器后发出以下语句:

    SET NAMES 'utf8mb4';
    

    有关客户端/服务器通信中与字符集相关的问题的更多信息,请参见“连接字符集和校验规则”。


    归类命名约定

    MySQL归类名称遵循以下约定:

    • 归类名称以与其关联的字符集的名称开头,通常后跟一个或多个后缀以指示其他归类特征。例如,utf8mb4_general_cilatin1_swedish_ci是分别为utf8mb4latin1字符集的校验规则。该binary字符集有一个单一的校验,也叫binary,没有后缀。
    • 特定于语言的校验规则包括语言环境代码或语言名称。例如,utf8mb4_tr_0900_ai_ciutf8mb4_hu_0900_ai_ci用于校验的字符utf8mb4的字符使用土耳其和匈牙利的规则,分别设定。utf8mb4_turkish_ciutf8mb4_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)。