MySQL 中文排序不生效
MySQL 默认的排序规则(如 utf8_general_ci 或 utf8mb4_general_ci)对中文的排序可能不符合预期,因为它不是基于拼音顺序,而是基于字符的 Unicode 编码顺序。
如果仍然不生效:
-
检查 MySQL 版本:
SELECT VERSION();- 如果是 MySQL 5.7,可以用
utf8mb4_unicode_ci。 - 如果是 MySQL 8.0+,可以用
utf8mb4_zh_0900_as_cs(更准确)。
- 如果是 MySQL 5.7,可以用
-
检查表的字符集和排序规则:
SHOW CREATE TABLE publicity_group;- 如果表的默认排序规则是
utf8mb4_general_ci,它可能无法正确排序中文。
- 如果表的默认排序规则是
-
临时修改查询排序规则:
SELECT id, group_id, group_name, publicity_name, remark, create_user_id, create_user_name, update_user_id, update_user_name, create_time, update_time, status FROM publicity_group WHERE (status <> 3) ORDER BY CONVERT(group_name USING utf8mb4) COLLATE utf8mb4_unicode_ci ASC, CONVERT(publicity_name USING utf8mb4) COLLATE utf8mb4_unicode_ci ASC;
修改表的排序规则(推荐)
如果长期需要按拼音排序,可以直接修改表的排序规则:
ALTER TABLE publicity_group
MODIFY COLUMN publicity_name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_zh_0900_as_cs;
总结
- 推荐方法 1(
CONVERT USING gbk)兼容性最好,适用于大多数 MySQL 版本。 - 推荐方法 2(修改表排序规则)适合长期需求,但需评估影响。
- 如果数据量较大,建议在
publicity_name上建立索引以提高排序性能:CREATE INDEX idx_publicity_name ON publicity_group (publicity_name);
如果你的 MySQL 版本支持 utf8mb4_zh_0900_as_cs,直接使用它是最佳选择。否则,GBK 转换是可靠的备选方案。
本文来自博客园,作者:VipSoft 转载请注明原文链接:https://www.cnblogs.com/vipsoft/p/18928361
浙公网安备 33010602011771号