MySQL 字符集支援分兩面向:字符集 與 排序規則,細化至四層級:伺服器、資料庫、資料表、連接。
latin1。my.ini:可覆蓋,通常安裝程式會設為 UTF-8。character_set_server。character_set_server。character_set_database。結論: 若安裝選擇多語言支援 (UTF-8),全鏈路預設皆為 UTF-8。
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation_%';
關鍵變數:character_set_client、character_set_connection、character_set_database、character_set_results、character_set_server、character_set_system (固定 utf8)。
[mysqld]
default-character-set = utf8
character_set_server = utf8
[client]
default-character-set = utf8
SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_results = utf8;
SET character_set_server = utf8;
SET collation_connection = utf8_general_ci;
SET collation_database = utf8_general_ci;
SET collation_server = utf8_general_ci;
即使資料庫/表設為 UTF-8,若連接層編碼錯誤,寫入仍會亂碼。必須在查詢前執行:
SET NAMES 'utf8';
-- 等同於:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
jdbc:mysql://192.168.3.99:3306/test?useUnicode=true&characterEncoding=gbk
SHOW VARIABLES LIKE '%char%'; — 伺服器/資料庫/客戶端字符集SHOW TABLE STATUS FROM db LIKE 'table%'; — 資料表字符集SHOW FULL COLUMNS FROM table; — 欄位字符集SHOW CHAR SET; — 目前安裝支援的字符集列表mysql_set_charset、或執行 SET NAMES utf8)。版本差異 (3.x/4.0/4.1+) 不重要,關鍵在這兩點設定正確。