什么是排序规则_mysql排序规则说明

来源:这里教程网 时间:2026-02-28 20:34:25 作者:

排序规则(Collation)是 MySQL 中用来定义字符如何比较和排序的一套规则,它依附于字符集存在,不单独生效。简单说:字符集决定“能存什么字”,排序规则决定“这些字怎么比、怎么排”。

排序规则的核心行为

它主要控制三类判断逻辑:

大小写是否敏感:比如
a
A
是否等价。后缀
_ci
(case-insensitive)表示不区分,
_cs
(case-sensitive)表示区分;
重音是否敏感:比如
é
e
是否视为相同。后缀
_ai
(accent-insensitive)忽略重音,
_as
(accent-sensitive)则区分;
是否按二进制值比较:后缀
_bin
表示直接按字符的字节值排序,最严格,也最高效,但不符合自然语言习惯(如中文拼音顺序、德语变音处理等)。

常见排序规则命名解读

utf8mb4_0900_ai_ci
为例:

utf8mb4
:所属字符集,支持 4 字节 Unicode(含 emoji);
0900
:表示基于 Unicode 9.0 标准的排序权重算法,更准确支持多语言;
ai
:忽略重音(accent-insensitive);
ci
:忽略大小写(case-insensitive)。

对比

utf8mb4_bin
:同样用 utf8mb4 字符集,但所有字符都按二进制逐字节比对,
A
a
一定不等,
ñ
n
也绝不等同。

排序规则在哪起作用

它影响所有涉及字符比较或排序的操作,包括:

ORDER BY
字段排序结果(如中文按拼音?按 Unicode 码点?);
WHERE
中的字符串匹配(
name = 'Li'
是否匹配
'li'
);
GROUP BY
DISTINCT
的去重逻辑;
索引能否用于优化排序(如
ORDER BY last_name
能否走
INDEX(last_name)
,取决于该列的 collation 是否与索引一致)。

如何查看和设置排序规则

可查层级包括服务器、数据库、表、列、甚至单个字符串常量:

查当前库默认规则:
SELECT @@collation_database;
查某字符集的所有可用规则:
SHOW COLLATION WHERE Charset = 'utf8mb4';
建表时指定列规则:
name VARCHAR(100) COLLATE utf8mb4_unicode_ci
查询时临时指定:
SELECT * FROM users ORDER BY name COLLATE utf8mb4_bin;
(强制二进制排序)。

注意:下层(如列)会继承上层(如库)的默认规则,但可显式覆盖;不同 collation 混用可能触发隐式转换,影响性能和结果准确性。

相关推荐