MySQL 在查詢字串時預設大小寫不敏感,編譯時通常以 ISO-8859 字元集為預設,導致中文編碼在比較過程中發生大小寫轉換,造成排序錯誤。以下提供三種解決方式:
將包含中文的欄位設為二進位比較,例如將 name CHAR(10) 改為 name CHAR(10) BINARY。
若使用原始碼編譯,可加入 --with-charset=gbk 參數,使 MySQL 直接支援中文查詢與排序(預設為 latin1)。亦可用 extra-charsets=gb2312,gbk 加入多組字元集。
不想修改表結構或重新編譯時,可在 ORDER BY 子句使用 CONVERT:
SELECT * FROM mytable ORDER BY CONVERT(chineseColumnName USING gbk);