首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 中文按拼音排序:CONVERT 轉 GBK 一招搞定

     編輯:MySQL 綜合教學

現象

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);

原理

  • GBK 編碼中,漢字按拼音順序排列(大致)。
  • CONVERT(... USING gbk) 將 UTF-8 字串轉為 GBK 字節序列進行比較,達到拼音排序效果。

效能與替代方案

方案優點缺點
CONVERT USING gbk零改表,即時生效每行轉碼,大表排序慢;不支援索引
新增 pinyin 欄位存拼音可建索引,排序極快需維護拼音欄位(觸發器/應用層)
MySQL 8.0+ utf8mb4_zh_0900_as_cs 校對規則原生支援拼音排序需升級版本,且對多音字支援有限

建議

  • 小表、低頻查詢:直接用 CONVERT USING gbk。
  • 大表、高頻排序:冗餘拼音欄位 + 索引,或升級 MySQL 8.0 使用 ICU 校對規則。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved