首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL連線字符集與校對規則系統變數完整解析

     編輯:MySQL 資料庫相關知識

連線相關字符集變數架構

客戶端與伺服器交互涉及四組關鍵系統變數:

階段變數說明
客戶端發送查詢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 NAMES 'charset_name'

等價於:

SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;

同時將collation_connection設為x的預設校對規則。

SET CHARACTER SET 'charset_name'

等價於:

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原始位元組
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved