• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 向字符集添加校验规则

    校验规则是一组定义如何比较和校验字符串的规则。MySQL中的每个校验规则都属于一个字符集。每个字符集至少具有一个校验规则,大多数字符集具有两个或多个校验规则。

    校验规则根据权重对字符校验。字符集中的每个字符都映射到权重。权重相等的字符比较相等,权重不相等的字符根据其权重的相对大小进行比较。

    WEIGHT_STRING()功能可用于参见字符串中字符的权重。它返回以表示重量的值是一个二进制字符串,因此可以方便地以可打印形式显示重量。以下示例显示,如果是非二进制不区分大小写的字符串,则字母大小写的权重没有区别,但是如果是二进制字符串,则权重不会有所不同:HEX(WEIGHT_STRING(str))'AaBb'

    mysql> SELECT HEX(WEIGHT_STRING('AaBb' COLLATE latin1_swedish_ci));
    +------------------------------------------------------	+
    | HEX(WEIGHT_STRING('AaBb' COLLATE latin1_swedish_ci)) 	|
    +------------------------------------------------------	+
    | 41414242                                             	|
    +------------------------------------------------------	+
    mysql> SELECT HEX(WEIGHT_STRING(BINARY 'AaBb'));
    +-----------------------------------	+
    | HEX(WEIGHT_STRING(BINARY 'AaBb')) 	|
    +-----------------------------------	+
    | 41614262                          	|
    +-----------------------------------	+
    

    MySQL支持多种校验规则实现,如“校验规则实现类型”中所述。其中一些可以无需重新编译即可添加到MySQL:

    • 8位字符集的简单校验。
    • Unicode字符集的基于UCA的校验规则。
    • 二进制(xxx_bin)校验。

    以下各节描述如何将前两种类型的校验规则添加到现有字符集。现有的所有字符集已经具有二进制校验规则,因此这里无需描述如何添加一个。

    添加新校验规则的过程摘要:

    1. 选择校验规则ID。
    2. 添加用于命名校验规则并描述字符校验规则的配置信息。
    3. 重新启动服务器。
    4. 验证是否存在校验规则。

    此处的说明仅涵盖无需重新编译MySQL即可添加的校验规则。要添加确实需要重新编译的校验规则(通过C源文件中的函数实现),请使用“添加字符集”中的说明。但是,除了添加完整字符集所需的所有信息外,只需为现有字符集修改适当的文件即可。也就是说,基于字符集的当前校验已经存在的内容,为新校验添加数据结构,功能和配置信息。

    注意

    如果您修改现有的校验规则,则可能会影响使用该校验规则的列上的索引的行顺序。在这种情况下,请重建任何此类索引,以避免出现诸如查询结果不正确的问题。

    其他资源

    • Unicode校验算法(UCA)规范:http://www.unicode.org/reports/tr10/
    • 语言环境数据标记语言(LDML)规范:http://www.unicode.org/reports/tr35/