MySQL排序规则是与字符集绑定的比较逻辑,需在库/表/列层级显式指定;常用命令包括SHOW COLLATION等查看支持规则,创建数据库时推荐直接指定如utf8mb4_zh_0900_as_cs,修改时注意数据编码转换。

MySQL 排序规则(Collation)不是独立设置的“功能开关”,而是与字符集绑定的比较逻辑。配置的关键在于:选对字符集、匹配适用的排序规则、并在合适层级(库/表/列)显式指定。
确认当前支持的排序规则
执行以下命令查看 MySQL 支持的所有排序规则,尤其关注你用的字符集(如 utf8mb4):
-
SHOW COLLATION;—— 查看全部 -
SHOW COLLATION WHERE Charset = 'utf8mb4';—— 筛选 utf8mb4 下可用规则 -
SHOW COLLATION LIKE 'utf8mb4_zh%';—— 查中文专用规则(如 utf8mb4_zh_0900_as_cs,区分大小写+重音,适合精准中文排序)
在创建数据库时指定排序规则
这是最推荐的起点,避免后续迁移成本。语法中 COLLATE 必须与字符集兼容:
CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_zh_0900_as_cs;- 若只写
CHARACTER SET utf8mb4,MySQL 会自动使用该字符集默认规则(如 utf8mb4_0900_ai_ci)
修改已有数据库或表的排序规则
注意:仅改库/表定义不会自动转换已有数据的编码,需额外处理字段内容:
- 改数据库:
ALTER DATABASE mydb DEFAULT COLLATION utf8mb4_zh_0900_as_cs; - 改表:
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_zh_0900_as_cs;(含字段级转换) - 只改某列:
ALTER TABLE users MODIFY name VARCHAR(100) COLLATE utf8mb4_zh_0900_as_cs;
排序规则的实际影响点
它直接决定 WHERE 中的字符串比较、ORDER BY 的结果顺序、以及 GROUP BY / DISTINCT 的去重逻辑:
-
utf8mb4_0900_ai_ci:忽略大小写和重音,'café'和'cafe'视为相同 -
utf8mb4_bin:按字节逐位比较,区分一切,适合哈希值或严格唯一校验 -
utf8mb4_zh_0900_as_cs:中文拼音排序更准,且区分大小写(如“A”和“a”不等),适合需要精确中文目录排序的场景










