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

Windows CMD 下 MySQL 中文亂碼解決:SET NAMES GBK

     編輯:MySQL 資料庫相關知識

在 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 (結果集回傳編碼)
  • Windows CMD 預設代碼頁為 936 (GBK),資料庫若儲存為 GBK/UTF8,需讓客戶端編碼與終端機一致。

永久生效設定

# 選項 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-865001 (chcp 65001)utf8 / utf8mb4
GBK936 (預設)gbk
Latin1437/850latin1

提示:若資料庫為 UTF-8,建議將 CMD 代碼頁切換為 65001 (chcp 65001) 並執行 SET NAMES utf8mb4,可完整支援 Emoji 等補充字元。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved