首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 中文亂碼問題深度解析(三):字符集轉換原理圖與三統一解決方案

     編輯:MySQL 綜合教學

MySQL 中文亂碼根治:字符集轉換鏈路圖解與「三統一」法則

中文亂碼本質是編碼不一致:客戶端編碼、連接層編碼、服務端內部編碼、結果集編碼任一環節不匹配即產生亂碼。

一、字符集轉換原理鏈路

[客戶端編碼] --(發送)--> [連接層編碼] --(轉換)--> [服務端內部編碼] --(存儲/讀取)--> [結果集編碼] --(返回)--> [客戶端顯示]
   GBK (DOS)          utf8/gbk              utf8/gbk              utf8/gbk              GBK (DOS)

關鍵系統變量:

  • character_set_client:客戶端發送語句的編碼。
  • character_set_connection:Server 將接收到的語句轉換為此編碼解析。
  • character_set_database/table/column:數據存儲編碼。
  • character_set_results:結果集返回給客戶端的編碼。
  • character_set_server:默認庫/表編碼。

二、查看當前編碼設置

SHOW VARIABLES LIKE 'character_set_%';

重點觀察 client、connection、results、database、server 是否一致。

三、臨時會話級修復(當前連接生效)

SET character_set_client = gbk;
SET character_set_connection = utf8;
SET character_set_results = gbk;
-- 或一鍵
SET NAMES gbk;  -- 等同於以上三條

四、永久配置修復(配置文件 my.cnf/my.ini)

[client]
default-character-set = gbk   # 客戶端默認編碼

[mysql]
default-character-set = gbk   # mysql 命令行客戶端

[mysqld]
character-set-server = utf8   # 服務端默認存儲編碼
collation-server = utf8_general_ci

修改後必須重啟 MySQL 服務生效。

五、DOS 窗口特殊性

  • Windows CMD 默認代碼頁 936 (GBK)。
  • MySQL 客戶端在 DOS 下運行,character_set_client 應設為 gbk。
  • 若使用 UTF-8 終端(如 Windows Terminal / PowerShell 7+),可全鏈路 utf8mb4。

六、應用層最佳實踐(PHP/Java/Python)

  1. 數據庫/表/列:utf8mb4。
  2. 連接池/驅動初始化:執行 SET NAMES utf8mb4(或驅動屬性 characterEncoding=utf8mb4)。
  3. 應用代碼文件保存為 UTF-8 無 BOM。
  4. 頁面/響應頭:Content-Type: text/html; charset=utf-8。

七、總結:三統一法則

  1. 存儲統一:庫/表/列 utf8mb4。
  2. 傳輸統一:連接建立即 SET NAMES utf8mb4(客戶端、連接層、結果集三統一)。
  3. 顯示統一:前端頁面/終端編碼 UTF-8。

遵循三統一,徹底告別中文亂碼。

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