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

MySQL 中文排序問題解決:BINARY 屬性法 vs 編譯指定 GBK 字元集

     編輯:MySQL 資料庫相關知識

問題現象

中文欄位 ORDER BY 排序錯誤,原因:預設 latin1 字元集下,中文編碼位元比較不符合語義排序。

方法 1:欄位加 BINARY 屬性 (快速止血)

ALTER TABLE t MODIFY name CHAR(10) BINARY;
-- 或建表時
CREATE TABLE t (name CHAR(10) BINARY);
  • 強制位元組級比較,排序依編碼順序 (GBK 下符合拼音/筆畫大致順序)
  • 副作用:大小寫敏感、LIKE 比較也變區分大小寫
  • 已驗證有效

方法 2:編譯安裝指定 --with-charset=gbk (根治)

./configure --with-charset=gbk --with-extra-charsets="gbk gb2312 big5 utf8" ...
  • 預設字元集為 GBK,排序規則 (Collation) 內建正確中文排序
  • 需重新編譯安裝,適用全新部署
  • 未實測 (標記待驗證)

現代最佳實務 (MySQL 4.1+)

  • 建表指定字元集與排序規則:
    CREATE TABLE t (name VARCHAR(50) CHARACTER SET gbk COLLATE gbk_chinese_ci);
  • 或使用 UTF-8:
    CHARACTER SET utf8 COLLATE utf8_unicode_ci (支援多語言、排序更精準)
  • Session 級臨時指定:SET NAMES gbk; SET SESSION collation_connection = gbk_chinese_ci;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved