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

MySQL 中文拼音排序實現:GBK 直接排序、UTF8 轉碼排序與字符集檢查

     編輯:MySQL 綜合教學

MySQL 中文拼音排序實現:GBK 直接排序、UTF8 轉碼排序與字符集檢查

MySQL 中文排序規則取決於字符集與校對集。GBK 編碼天然按拼音順序;UTF8/UTF8MB4 需顯式轉碼或指定校對集。本文提供三種方案及字符集檢查命令。

方案一:GBK 編碼表直接排序 (最簡單)

若表/列字符集為 GBK (或 GB2312),默認校對集 gbk_chinese_ci 已按拼音排序:

SELECT * FROM user ORDER BY name ASC; -- 直接按拼音升序

方案二:UTF8/UTF8MB4 表 - 查詢時轉碼排序

使用 CONVERT() 函數將列值臨時轉為 GBK 再排序:

SELECT * FROM user ORDER BY CONVERT(name USING gbk) ASC;

注意:無法使用索引,大表性能差。適合臨時查詢、小數據量。

方案三:UTF8/UTF8MB4 表 - 指定校對集排序 (推薦,可用索引)

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:連接交互字符集 (應用層需一致)

最佳實踐建議

  1. 新項目統一 utf8mb4 + utf8mb4_zh_0900_as_cs (8.0+),存儲、排序、檢索一體化,無需轉碼。
  2. 存量 UTF8 表:查詢時用 CONVERT(... USING gbk) 臨時解決;長期遷移至 utf8mb4 並指定中文校對集。
  3. 應用層排序:極大數據量/複雜排序規則 (多音字、姓名筆畫) 建議應用層拉取主鍵後按拼音庫排序,再回查詳情。

字符集變量示例

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved