在 Windows 命令提示字元 (CMD) 使用 mysql 客戶端查詢中文資料時,若出現「???」亂碼,主因為客戶端字元集與資料庫儲存編碼不匹配。一行指令即可修正。
mysql> SELECT name FROM users WHERE id = 1;
+--------+
| name |
+--------+
| ??? |
+--------+
mysql> SET NAMES gbk;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name FROM users WHERE id = 1;
+--------+
| name |
+--------+
| 中文名 |
+--------+
SET NAMES gbk 相當於同時設定三個會話變數:
character_set_client = gbk (客戶端送出編碼)character_set_connection = gbk (連線層轉換編碼)character_set_results = gbk (結果集回傳編碼)# 選項 1:my.ini [mysql] 區段
[mysql]
default-character-set = gbk
# 選項 2:建立登入腳本 login.sql
-- login.sql
SET NAMES gbk;
# 啟動時指定 mysql --init-command="SET NAMES gbk" 或放入 MYSQL_HISTFILE
| 資料庫儲存編碼 | CMD 代碼頁 | SET NAMES 值 |
|---|---|---|
| UTF-8 | 65001 (chcp 65001) | utf8 / utf8mb4 |
| GBK | 936 (預設) | gbk |
| Latin1 | 437/850 | latin1 |
提示:若資料庫為 UTF-8,建議將 CMD 代碼頁切換為 65001 (chcp 65001) 並執行 SET NAMES utf8mb4,可完整支援 Emoji 等補充字元。