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

MySQL 連線字元集與校對規則完整指南:client、connection、results 三層設定

     編輯:MySQL 資料庫相關知識

MySQL 字元集三層轉換機制:client → connection → results

每個客戶端連線擁有三組字元集變數,掌握它們才能徹底解決亂碼。

三大系統變數

變數角色說明
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
  • JDBC: 連線字串 ?characterEncoding=utf8(新版驅動自動偵測)
  • 禁止轉換: SET character_set_results = NULL; 原始位元組回傳
  • 查看目前設定: SHOW VARIABLES LIKE 'character_set%'; SHOW VARIABLES LIKE 'collation%';

轉換陷阱

  • 資料庫/表/欄位字元集與連線不一致 → 隱含轉換 → 資料遺失(如 utf8 存 latin1 連線)
  • SET NAMES 僅影響**目前連線**,不改變表定義
  • 校對規則影響比較/排序,utf8_general_ci 不分大小寫、utf8_bin 區分

黃金法則: **全鏈路一致**——應用程式、連線、資料庫、表、欄位、伺服器預設,全部統一字元集(建議 utf8mb4)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved