首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Windows MySQL 命令行中文亂碼解決:my.ini 字符集配置指南

     編輯:MySQL 資料庫相關知識

Windows 下 MySQL 預設字符集 latin1 不支援中文,導致命令行顯示亂碼。修改 my.ini 統一設定為 gbk 或 utf8mb4 即可解決。

問題現象

mysql> SELECT '中文測試';
+--------------+
| 中文測試     |
+--------------+
| ????         |  -- 或 乱码字符
+--------------+

解決步驟

1. 停止 MySQL 服務

# 方式一:服務管理器
services.msc → MySQL → 右鍵停止

# 方式二:命令行 (管理員權限)
net stop mysql

2. 定位並編輯 my.ini

# 常見路徑
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
C:\Program Files\MySQL\MySQL Server 8.0\my.ini
# 或安裝目錄下

3. 修改兩處關鍵配置

[client]
default-character-set = gbk   # 或 utf8mb4

[mysql]
default-character-set = gbk   # 或 utf8mb4

[mysqld]
character-set-server = gbk    # 或 utf8mb4
collation-server = gbk_chinese_ci  # gbk 對應排序規則
# utf8mb4 對應:
# character-set-server = utf8mb4
# collation-server = utf8mb4_unicode_ci

# 可選:強制忽略客戶端字符集設置
# skip-character-set-client-handshake

4. 重新啟動服務

net start mysql

5. 驗證生效

mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | gbk    |
| character_set_connection | gbk    |
| character_set_database   | gbk    |
| character_set_results    | gbk    |
| character_set_server     | gbk    |
| character_set_system     | utf8   |
| character_sets_dir       | ...    |
+--------------------------+--------+

mysql> SELECT '中文測試';
+--------------+
| 中文測試     |
+--------------+
| 中文測試     |  -- 正常顯示
+--------------+

gbk vs utf8mb4 選擇建議

維度gbkutf8mb4
中文支援完美 (國家標準)完美 (含 Emoji、生僻字)
英文/其他語言差 (需轉碼)原生支援
存儲空間中文 2 bytes中文 3-4 bytes
生態相容性舊系統、中文環境現代標準、國際化、Web 應用
建議場景純中文內部系統、舊專案維護新專案、Web、API、多語言、Emoji

常見坑點

  1. 僅修改 client 端:伺服器端 character-set-server 未改,存入數據仍按 latin1 處理,讀取時雙重轉碼導致亂碼
  2. 資料庫/表/欄位字符集不一致:需同步修改 ALTER DATABASE ... CHARSET=gbk, ALTER TABLE ... CONVERT TO CHARACTER SET gbk
  3. 命令行工具編碼:CMD/PowerShell 預設代碼頁 936 (gbk) / 65001 (utf-8),執行 chcp 65001 切換 UTF-8 模式
  4. 連線字符集:應用層連線字串需指定 characterEncoding=gbk 或 utf8mb4

一鍵修正腳本 (管理員 PowerShell)

# 1. 停止服務
Stop-Service -Name MySQL80 -Force -ErrorAction SilentlyContinue

# 2. 備份並修改 my.ini
$ini = "C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"
cp $ini "$ini.bak.$(Get-Date -Format 'yyyyMMdd')"
$content = Get-Content $ini -Raw
$content = $content -replace '(?s)(?<=\[client\]).*?(?=\[)', "`ndefault-character-set = utf8mb4`n"
$content = $content -replace '(?s)(?<=\[mysql\]).*?(?=\[)', "`ndefault-character-set = utf8mb4`n"
$content = $content -replace '(?s)(?<=\[mysqld\]).*?(?=\[)', "`ncharacter-set-server = utf8mb4`ncollation-server = utf8mb4_unicode_ci`n"
Set-Content $ini $content -Encoding UTF8

# 3. 啟動服務
Start-Service -Name MySQL80

# 4. 驗證
mysql -e "SHOW VARIABLES LIKE 'character_set%'; SELECT '中文測試';"
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved