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

MySQL 中文按拼音排序兩大方案:CONVERT 法與首字母映射法

     編輯:MySQL 資料庫相關知識

業務需求:酒店名稱按中文拼音排序。表編碼為 UTF-8,提供兩種可直接落地的 SQL 方案。

方案一:CONVERT + COLLATE (簡單通用)

SELECT `hotel_name`
FROM `hotel_base`
ORDER BY CONVERT(`hotel_name` USING gbk) COLLATE gbk_chinese_ci;
  • 原理:UTF-8 → GBK 編碼轉換,GBK 內碼順序天然符合拼音排序
  • gbk_chinese_ci 校對規則支援拼音比較
  • 優點:語句短、無需維護映射表、相容性好

方案二:首字母映射 + ELT/INTERVAL (精確可控)

SELECT `hotel_id`, `hotel_name`,
  ELT(INTERVAL(CONV(HEX(LEFT(CONVERT(`hotel_name` USING gbk),1)),16,10),
    0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,
    0xBBF7,0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,
    0xC8BB,0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),
    'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z') AS PY
FROM `hotel_base`
ORDER BY PY ASC;
  • 原理:取 GBK 編碼首字節高位區間,映射到 A-Z 拼音首字母
  • 優點:可精確控制排序邏輯、支援多音字自定義、可作為索引列加速
  • 缺點:SQL 複雜、需維護區間邊界

選型建議

  • 臨時查詢、報表、數據量 < 10 萬:方案一
  • 高頻排序、需建立函數索引 (MySQL 8.0+)、多音字特殊規則:方案二
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved