在 Windows DOS 視窗下使用 MySQL 客戶端查詢包含中文的資料表時,中文顯示為亂碼(如 或 亂碼字符),嚴重影響資料閱讀與除錯。
MySQL 客戶端輸出視窗使用的字符編碼(character_set_results)與作業系統終端機編碼不一致。Windows 中文環境預設使用 GB2312/GBK,而 MySQL 預設常為 UTF-8。
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 | +--------------------------+----------------------------+
mysql> SET character_set_results=gb2312;
執行後再次查詢,中文即可正常顯示。
編輯 my.ini(Windows)或 my.cnf(Linux),在 [client] 區段添加:
[client] default-character-set=gbk
重啟 MySQL 服務生效。若仍有問題,同步設置 [mysql] 區段:
[mysql] default-character-set=gbk
若上述均無效,問題多在 JDBC 連線層。在建立連線後、執行查詢前執行:
SET NAMES 'utf8';
等同於:
SET character_set_client = utf8; SET character_set_results = utf8; SET character_set_connection = utf8;
或在 JDBC URL 顯式指定:
jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf8&autoReconnect=true
| 層級 | 方案 | 生效範圍 |
|---|---|---|
| 會話級 | SET character_set_results=gb2312; | 當前連線 |
| 配置文件 | [client] default-character-set=gbk | 所有客戶端連線 |
| 應用連線 | SET NAMES 'utf8' 或 JDBC URL 參數 | Java 應用連線池 |
建議採用 UTF-8 全鏈路統一編碼(資料庫、表、連線、應用),避免編碼轉換帶來的亂碼風險。