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

徹底解決 Windows 命令列 MySQL 中文亂碼問題

     編輯:MySQL 綜合教學

徹底解決 Windows 命令列 MySQL 中文亂碼問題

在 Windows DOS 視窗操作 MySQL 時,插入中文資料常遇到 Data too long for column 錯誤,甚至欄位長度明顯足夠卻仍報錯。根源在於 編碼不一致:中文版 Windows 7/10 的 CMD 預設編碼為 GBK,而 MySQL Server 預設採用 UTF-8。客戶端以 GBK 送出,Server 以 UTF-8 解碼,導致位元組長度誤判與亂碼產生。

驗證編碼狀態

執行 SHOW VARIABLES LIKE 'character%'; 可見:

  • character_set_client (客戶端) 顯示 utf8,實際為 GBK
  • character_set_connection (連線) 為 utf8
  • character_set_server (伺服器儲存) 為 utf8
  • character_set_results (結果回傳) 為 utf8

實際流向:GBK 編碼送出 → 連線層以 UTF-8 解碼 → 伺服器以 UTF-8 儲存 → 回傳時 UTF-8 轉 GBK 顯示。中間缺少正確的轉碼步驟,亂碼在所難免。

方案一:臨時修正 (僅限當前 Session)

在當前 CMD 視窗執行:

SET NAMES gbk;

此指令同時設定 character_set_client, connection, results 為 GBK,告知 Server「我送的是 GBK,請幫我轉碼存成 UTF-8,查詢時也回傳 GBK」。執行後立即生效,重新插入中文即正常。但開新視窗即失效,治標不治本。

方案二:永久修正 (修改 my.ini)

  1. 找到 MySQL 安裝目錄下的 my.ini (通常在 C:\ProgramData\MySQL\MySQL Server x.x\ 或安裝根目錄)。
  2. 尋找 [client] 區段下的 default-character-set=utf8,改為 default-character-set=gbk。
  3. 重啟 MySQL 服務 (net stop mysql && net start mysql)。

此後所有 CMD 連線預設皆為 GBK,Server 會自動處理 GBK ⇄ UTF-8 的雙向轉碼 (接收 GBK → 轉 UTF-8 存儲 → 查詢時轉 GBK 回傳),徹底杜絕亂碼。

核心原理:編碼、解碼與轉碼

  • 編碼: 字元 → 二進位位元組 (GBK/UTF-8)。
  • 解碼: 位元組 → 字元。
  • 轉碼: 字元集 A 的位元組 → 字元集 B 的位元組 (需先解碼為字元再編碼)。

設定 default-character-set=gbk 後,MySQL 內建轉碼機制會在「連線層」自動將收到的 GBK 位元組轉為 UTF-8 存入引擎,讀取時反向轉換,實現無感相容。

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