UTF-8 編碼表中,ORDER BY name 依字元編碼排序,非拼音順序。例如「張三」編碼 E5 BC A0 E4 B8 89,排在「李四」E6 9D 8E E5 9B 9B 之前,但拼音「Zhang」應在「Li」之後。
SELECT * FROM user_table
ORDER BY CONVERT(name USING gbk);
CONVERT(... USING gbk) 將 UTF-8 字串轉為 GBK 字節序列進行比較,達到拼音排序效果。| 方案 | 優點 | 缺點 |
|---|---|---|
CONVERT USING gbk | 零改表,即時生效 | 每行轉碼,大表排序慢;不支援索引 |
新增 pinyin 欄位存拼音 | 可建索引,排序極快 | 需維護拼音欄位(觸發器/應用層) |
MySQL 8.0+ utf8mb4_zh_0900_as_cs 校對規則 | 原生支援拼音排序 | 需升級版本,且對多音字支援有限 |
CONVERT USING gbk。