Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  Character Sets, Collations, Unicode  /  Adding a Collation to a Character Set

12.14 添加排序规则到字符集

Warning

用户定义的排序规则已弃用,未来版本可能会删除对它们的支持。MySQL 8.4 服务器在 SQL 语句中使用 COLLATE 时发出警告;同样,在服务器启动时设置--collation-server 等于用户定义的排序规则名称时也会发出警告。

排序规则是比较和排序字符字符串的一组规则。每个排序规则在 MySQL 中都属于一个字符集。每个字符集至少有一个排序规则,多数有两个或更多排序规则。

基于权重的排序(collation):每个字符在字符集中对应一个权重。权重相等的字符比较为等价,权重不等的字符比较根据其权重的大小关系。

可以使用WEIGHT_STRING()函数来查看字符串中的权重。返回值是一个二进制字符串,所以可以使用HEX(WEIGHT_STRING(str))将权重以可读形式显示。下面的示例表明,如果是非二进制的大小写不敏感字符串,那么字母的权重相同,但如果是二进制字符串,那么权重不同:

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支持多种collation实现方式,详见Section 12.14.1, “Collation Implementation Types”。其中一些可以在不重新编译MySQL的情况下添加:

  • 8位字符集的简单collation。

  • 基于UCA的Unicode字符集collation。

  • 二进制(xxx_bin) collation。

以下部分描述了如何将用户定义的简单或基于UCA的collation添加到现有字符集中。所有现有字符集已经具有二进制collation,所以不需要在这里描述如何添加一个。

Warning

重新定义内置collation不受支持可能导致服务器行为异常。

添加新用户定义collation的总结步骤:

  1. 选择collation ID。

  2. 添加字符集配置信息,包括排序规则的描述和collation名称。

  3. 重启服务器。

  4. 验证服务器是否识别了新的字符集。

本节中的指令只涵盖用户定义的字符集,可以在不需要重新编译MySQL的情况下添加。要添加需要重新编译的字符集(即通过C源文件中的函数实现),请参阅第12.13节,“添加字符集”。然而,在基于现有字符集的当前排序规则基础上,添加数据结构、函数和配置信息,以便创建新的排序规则。这意味着,您可以基于现有字符集的当前排序规则,添加对应的数据结构、函数和配置信息以创建新的排序规则。

Note

如果您修改了现有的用户定义的排序规则,那么可能会影响使用该排序规则的列上的索引行顺序。在这种情况下,重建任何受影响的索引,以避免问题,如查询结果错误。请参阅第3.14节,“重建或修复表或索引”