MySQL 中文排序規則取決於字符集與校對集。GBK 編碼天然按拼音順序;UTF8/UTF8MB4 需顯式轉碼或指定校對集。本文提供三種方案及字符集檢查命令。
若表/列字符集為 GBK (或 GB2312),默認校對集 gbk_chinese_ci 已按拼音排序:
SELECT * FROM user ORDER BY name ASC; -- 直接按拼音升序
使用 CONVERT() 函數將列值臨時轉為 GBK 再排序:
SELECT * FROM user ORDER BY CONVERT(name USING gbk) ASC;
注意:無法使用索引,大表性能差。適合臨時查詢、小數據量。
MySQL 8.0+ 支持 utf8mb4_zh_0900_as_cs 等中文校對集;5.7 可用 utf8_general_ci (近似拼音) 或創建列時指定:
-- 建表時指定列校對集
CREATE TABLE user (
name VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_zh_0900_as_cs
);
-- 或查詢時指定 (5.7 無專用中文校對集,可用 utf8_general_ci 近似)
SELECT * FROM user ORDER BY name COLLATE utf8_general_ci;
SHOW VARIABLES LIKE 'character%';
關鍵輸出解讀:
character_set_server:服務器默認字符集 (新建庫繼承)character_set_database:當前數據庫字符集character_set_client/connection/results:連接交互字符集 (應用層需一致)utf8mb4 + utf8mb4_zh_0900_as_cs (8.0+),存儲、排序、檢索一體化,無需轉碼。CONVERT(... USING gbk) 臨時解決;長期遷移至 utf8mb4 並指定中文校對集。