首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 按漢字拼音首字母排序:CONVERT + COLLATE 一行搞定

     編輯:MySQL 資料庫相關知識

需求:中文欄位按拼音首字母排序(如「北京、上海、廣州」→ 「北京、廣州、上海」)。

核心語句

SELECT areaName FROM area
ORDER BY CONVERT(areaName USING gbk) COLLATE gbk_chinese_ci ASC;

原理解析

  • CONVERT(str USING gbk):將字串按 gbk 編碼重新解讀。MySQL 內部按字節碼排序,gbk 編碼下漢字按拼音順序排列(一級漢字區)。
  • COLLATE gbk_chinese_ci:指定 gbk 中文排序規則(不區分大小寫),確保按拼音排序而非字節碼序。

適用場景與限制

  • 適用於 CHAR/VARCHAR/TEXT 存儲中文的列。
  • 僅對簡體中文常用字有效;生僻字、繁體、拼音相同異序字可能不準。
  • MySQL 8.0+ 可改用 utf8mb4_zh_0900_as_cs 等更完善的 Unicode 排序規則,無需轉編碼。

替代方案

  1. 冗餘拼音列:pinyin VARCHAR(100) 存首字母或全拼,建索引排序,最快最準。
  2. 應用層排序:查出來用 ICU4J、pypinyin 等庫排序,適合結果集較小場景。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved