建立資料庫/資料表時,字元集設定雖重要,但 文字欄位(CHAR/VARCHAR/TEXT)務必明確指定為 GBK,才能確保中文排序與比較正確。
ALTER TABLE t MODIFY hoverfly BINARY(100);
ALTER TABLE t MODIFY hoverfly CHAR(100) CHARACTER SET gbk;
陷阱:若同步修改 my.ini 加入 default-character-set=gbk,未轉換的欄位反而會變亂碼。
在執行查詢前,先送出一條 Session 級指令:
SET character_set_results = NULL;
此舉讓 MySQL 以資料原始編碼回傳,無論欄位是否已轉換編碼,皆能正確顯示中文,且已轉換的欄位仍保有正確排序能力。
utf8mb4(MySQL 5.5+),徹底解決編碼問題。SET character_set_results = NULL 快速止血,再規劃全量轉碼計畫。