MySQL 中文排序不生效

MySQL 默认的排序规则(如 utf8_general_ciutf8mb4_general_ci)对中文的排序可能不符合预期,因为它不是基于拼音顺序,而是基于字符的 Unicode 编码顺序。

如果仍然不生效:

  1. 检查 MySQL 版本

    SELECT VERSION();
    
    • 如果是 MySQL 5.7,可以用 utf8mb4_unicode_ci
    • 如果是 MySQL 8.0+,可以用 utf8mb4_zh_0900_as_cs(更准确)。
  2. 检查表的字符集和排序规则

    SHOW CREATE TABLE publicity_group;
    
    • 如果表的默认排序规则是 utf8mb4_general_ci,它可能无法正确排序中文。
  3. 临时修改查询排序规则

    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;

总结

  • 推荐方法 1CONVERT USING gbk)兼容性最好,适用于大多数 MySQL 版本。
  • 推荐方法 2(修改表排序规则)适合长期需求,但需评估影响。
  • 如果数据量较大,建议在 publicity_name 上建立索引以提高排序性能:
    CREATE INDEX idx_publicity_name ON publicity_group (publicity_name);
    

如果你的 MySQL 版本支持 utf8mb4_zh_0900_as_cs,直接使用它是最佳选择。否则,GBK 转换是可靠的备选方案。

posted @ 2025-06-14 15:08  VipSoft  阅读(132)  评论(0)    收藏  举报