每個客戶端連線擁有三組字元集變數,掌握它們才能徹底解決亂碼。
| 變數 | 角色 | 說明 |
|---|---|---|
character_set_client | 客戶端送查詢時的編碼 | 伺服器以此解讀收到的 SQL 字串 |
character_set_connection / collation_connection | 伺服器內部處理編碼 | 查詢從 client 轉換至 connection;字串字面值比較用 collation_connection |
character_set_results | 結果集回傳編碼 | 包含資料值與中繼資料(欄位名等) |
-- 1. SET NAMES 'charset':最常用,三層一次設定
SET NAMES 'utf8';
-- 等同於:
SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_results = utf8;
-- 同時隱含設定 collation_connection = utf8_general_ci (預設校對)
-- 2. SET CHARACTER SET 'charset':連線層用預設資料庫校對
SET CHARACTER SET 'utf8';
-- 等同於:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET collation_connection = @@collation_database;
--default-character-set=utf8 或連線屬性)SET NAMES 設定三層變數my.cnf [client] / [mysql] 區段加 default-character-set=utf8?characterEncoding=utf8(新版驅動自動偵測)SET character_set_results = NULL; 原始位元組回傳SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%';SET NAMES 僅影響**目前連線**,不改變表定義utf8_general_ci 不分大小寫、utf8_bin 區分黃金法則: **全鏈路一致**——應用程式、連線、資料庫、表、欄位、伺服器預設,全部統一字元集(建議 utf8mb4)。