Windows 下使用 cmd 登入 MySQL 時,常遇到無法插入中文、查詢結果顯示亂碼。根因是客戶端字符集與服務端/表字符集不一致。本文給出標準化配置與會話級修正方案。
my.ini定位 MySQL 安裝目錄下的 my.ini(或 my.cnf),在 [client] 與 [mysql] 區塊添加:
[client] port=3306 default-character-set=utf8 [mysql] default-character-set=utf8 # 服務端同步設置(建議) [mysqld] character-set-server=utf8 collation-server=utf8_general_ci
重啟服務生效:
net stop mysql net start mysql # 或服務管理器重啟
mysql -u root -p mysql> SHOW VARIABLES LIKE '%char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/ | +--------------------------+----------------------------+
關鍵四項 client、connection、results、database 均為 utf8 即正常。
若無權限修改配置文件,可在登入後執行:
SET NAMES utf8; -- 等價於以下三條 SET character_set_client = utf8; SET character_set_connection = utf8; SET character_set_results = utf8; -- 若服務端為 latin1 需額外設置 SET character_set_database = utf8; SET character_set_server = utf8;
chcp 65001,或在快捷方式目標追加 /k chcp 65001。| 現象 | 可能原因 | 解決 |
|---|---|---|
插入中文報錯 Incorrect string value | 表/列字符集為 latin1 | ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4; |
| 查詢顯示「???」或亂碼 | client/results 不一致 | 檢查 SHOW VARIABLES LIKE 'char%',執行 SET NAMES utf8 |
| 配置文件修改無效 | 未重啟 / 讀取了其它 my.cnf | mysql --help | grep my.cnf 確認加載順序 |
| 存儲 Emoji 失敗 | utf8 僅支援 BMP 平面 | 升級表/庫/連接至 utf8mb4(需 5.5.3+) |
CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci。?characterEncoding=utf8&useUnicode=true;Python charset='utf8mb4';Go DSN charset=utf8mb4。「配置文件落地 + 服務重啟 + 客戶端字體 + 會話驗證」四步走,徹底解決 CMD 中文亂碼。核心原則:**客戶端、連接層、服務端、存儲層**四端字符集**統一**。生產環境強烈建議全鏈路升級 utf8mb4,一次到位支援 Emoji 與生僻字。