| 變量 | 含義 |
| character_set_client | 客戶端發送語句的編碼 |
| character_set_connection | 服務器將客戶端語句轉換為的編碼 |
| character_set_database | 當前數據庫默認編碼 |
| character_set_results | 服務器返回結果集的編碼 |
| character_set_server | 服務器默認編碼 |
| character_set_system | 系統標識符編碼(恆為 utf8) |
二、現象複現與解決
環境
安裝配置 default-character-set=utf8,庫/表/列均為 utf8,Java 寫入 UTF-8 數據。
cmd 查詢亂碼
mysql> SELECT * FROM t_user;
+----+----------+---------------------+
| id | name | birth |
+----+----------+---------------------+
| 1 | 寮犱笁0 | 2015-05-03 00:00:00 | -- 亂碼
...
解決:臨時切換客戶端/結果集為 GBK
mysql> SET NAMES gbk;
mysql> SELECT * FROM t_user;
+----+--------+---------------------+
| id | name | birth |
+----+--------+---------------------+
| 1 | 張三0 | 2015-05-03 00:00:00 | -- 正常
...
原理:Windows 控制台默認編碼為 GBK/CP936,SET NAMES gbk 使 character_set_results=gbk,結果集按 GBK 編碼輸出,控制台正常顯示。
三、持久化配置:修改 my.ini
# my.ini
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=gbk # 命令行客戶端默認用 GBK 顯示
重啟服務生效。[mysql] 區塊專門控制 mysql 命令行客戶端行為。
四、庫/表/列編碼查看與修改
1. 查看
-- 數據庫
SHOW CREATE DATABASE db_name;
-- 表
SHOW CREATE TABLE tbl_name;
-- 列(隱含在 SHOW CREATE TABLE 輸出中)
2. 修改
- 上一篇文章: Linux 下排查 MySQL 鎖等待:從 SHOW PROCESSLIST 到 lsof/netstat 定位阻塞進程
- 下一篇文章: 中文存入 MySQL 顯示亂碼?三層編碼統一法:IDE、數據庫、連接串
Copyright ©
程式碼之家 All Rights Reserved