客戶端與伺服器交互涉及四組關鍵系統變數:
| 階段 | 變數 | 說明 |
|---|---|---|
| 客戶端發送查詢 | character_set_client | 客戶端發送SQL語句使用的字符集 |
| 伺服器接收轉換 | character_set_connection collation_connection | 將查詢從client字符集轉換為connection字符集;字串字面值比較用collation_connection |
| 伺服器回傳結果 | character_set_results | 結果集(資料+中繼資料如欄位名)轉換目標字符集 |
character_set_database、collation_database:當前預設資料庫的字符集/校對規則character_set_server、collation_server等價於:
SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;
同時將collation_connection設為x的預設校對規則。
等價於:
SET character_set_client = x;
SET character_set_results = x;
SET collation_connection = @@collation_database;
以預設資料庫校對規則為connection校對規則。
連線時客戶端傳送希望字符集,伺服器自動執行SET NAMES操作。mysql客戶端可用--default-character-set選項或選項檔[mysql] default-character-set=koi8r持久化設定。
SET character_set_results = NULL;
伺服器將原始字符集直接回傳,避免轉換損失(如latin2→latin1丟失字符)。
欄位column1 CHAR(5) CHARACTER SET latin2:
SET NAMES → 以客戶端字符集回傳SET NAMES 'latin1' → 伺服器轉換latin2→latin1後回傳(可能丟字)character_set_results=NULL → 直接回傳latin2原始位元組