中文亂碼是 MySQL 使用者最頭痛的問題之一。本文基於 Win7 + MySQL 5.6 實測環境(庫表均 utf8),系統梳理客戶端操作、mysqldump 匯出、控制台顯示差異三大場景的解決方案,並揭示控制台編碼對顯示的影響機制。
SET NAMES gbk; -- 或 utf8,視客戶端編碼而定
SET NAMES 等同於同時設定 character_set_client、character_set_connection、character_set_results 三個變量。
SHOW VARIABLES LIKE 'char%'; -- 先查看當前所有字符集變量 SET character_set_results=gbk; -- 僅修改結果集編碼
注意:上述設定僅對當前連線有效,服務重啟後失效。永久生效需修改 my.ini 的 [mysqld] 區塊加入 character-set-server=utf8。
| 場景 | 表結構(含中文註釋) | 表資料(中文內容) |
|---|---|---|
| 控制台直接輸出 | 無論 --default-character-set 設為 gbk/utf8/latin1,永遠亂碼 | 需加 --default-character-set=gbk 才正常 |
導出到檔案 (> file.sql) | 總是正常(用 UltraEdit 打開) | 需加 --default-character-set=gbk 才正常 |
--default-character-set 參數控制,必須設為 gbk(匹配 cmd 編碼)才能在控制台正常顯示;導出檔案同理。--default-character-set 僅影響資料部分,對表結構註釋無效。SET NAMES utf8(或 gbk),確保寫入/讀取編碼一致。mysqldump -uroot -p --default-character-set=gbk db_name table_name > backup.sqlSHOW CREATE TABLE tbl_name; -- 看表字符集 SHOW FULL COLUMNS FROM tbl_name; -- 看欄位字符集 SHOW TABLES; DESC tbl_name; SHOW DATABASES; SHOW CREATE DATABASE db_name;
掌握編碼流向(Client → Connection → Server → Storage → Results),亂碼問題自然迎刃而解。