排序规则是一组规则,它定义了如何比较和排序字符串的规则。MySQL中的每个归类都属于单个字符集。每个字符集至少有一个排序规则,并且大多数都有两个或更多的排列。
根据权重的融合订单字符。字符集中的每个字符映射到重量。具有相等权重的字符与相等的相等,并且根据其权重的相对幅度比较的不等的字符。
这权力_tring()
函数可用于查看字符串中字符的权重。它返回以指示权重的值是二进制字符串,因此使用方便十六进制(重量_(
以可打印形式显示重量。以下示例显示重量对字母的字母表不不同str.
)))'aabb'
如果它是非中等差分不敏感的字符串,但如果它是二进制字符串,则不同:
mysql>选择hex(weight_string('aabb'collate latin1_swedish_ci));+ ----------------------------------------------- + |十六进制(right_string('aabb'collate latin1_swedish_ci))|+ ----------------------------------------------- + |41414242 |+ ----------------------------------------------- + mysql>选择hex(weight_string(二进制'aabb'));+ ------------------------------- + |十六进制(权重(二进制'AABB'))|+ ------------------------------- + | 41614262 | +-----------------------------------+
MySQL支持多个整理实施,如讨论的所讨论的第10.14.1节“归属实施类型”。其中一些可以在没有重新编译的情况下添加到mysql中:
8位字符集的简单拼接。
基于UCA的Unicode字符集的拼音。
二进制(
)排列。XXX.
_BIN.
以下部分介绍了如何将前两种类型的用户定义的排序组添加到现有字符集。所有现有字符集已有二进制归类,因此这里不需要描述如何添加一个。
不支持重新定义内置归类,可能导致意外的服务器行为。
添加新用户定义的排序规则的过程摘要:
选择归类ID。
添加名称排序规则的配置信息,并描述字符排序规则。
重新启动服务器。
验证服务器是否识别了排序规则。
这里的说明仅涵盖了可以在不重新编译MySQL的情况下添加的用户定义的拼写。要添加确实需要重新编译的排序规则(通过C源文件中的函数实现),请使用指令第10.13节“添加一个字符集”。但是,而不是添加完整字符集所需的所有信息,而只是修改现有字符集的相应文件。也就是说,基于已经存在的字符集的当前族组织的内容,添加新归类的数据结构,函数和配置信息。
如果修改现有的用户定义的排序规则,则可能会影响使用归类的列上的索引的行排序。在这种情况下,重建任何此类索引以避免诸如错误查询结果等问题。看第2.11.13节,“重建或修理表或索引”。
额外资源
示例显示如何为全文搜索添加排序规则:第12.10.7节“为全文索引添加用户定义的排序规则”
Unicode Colration算法(UCA)规范:http://www.unicode.org/reports/tr10/
区域设置数据标记语言(LDML)规范:http://www.unicode.org/reports/tr35/