現象:插入中文報錯或顯示亂碼 (如 ???、锟斤拷)。
my.ini (如 C:\Program Files\MySQL\MySQL Server 5.6\my.ini)[client] 和 [mysql] 區段default-character-set=utf8 (或 utf8mb4):[client]
port=3306
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
保存後 重啟 MySQL 服務 (服務管理器或 net stop/start mysql)。
mysql> SHOW VARIABLES LIKE '%char%';
# 觀察 character_set_client/connection/results/database/server
mysql> SET character_set_database = utf8;
mysql> SET character_set_server = utf8;
mysql> SET character_set_client = gbk; -- 若客戶端為 gbk (如 cmd 預設)
mysql> SET character_set_connection = gbk;
mysql> SET character_set_results = gbk; -- 解決 SELECT 顯示亂碼
# 一鍵等效
mysql> SET NAMES gbk; -- 視客戶端編碼而定,utf8 環境用 SET NAMES utf8
mysql> INSERT INTO test_tbl (name) VALUES ('中文測試');
Query OK, 1 row affected
mysql> SELECT * FROM test_tbl;
+----+--------------+
| id | name |
+----+--------------+
| 1 | 中文測試 | <-- 正常顯示
+----+--------------+
chcp 65001 切換 UTF-8) 與 SET NAMES 一致。應用程式 (gbk/utf8)
↓ character_set_client
MySQL Server 解碼
↓ character_set_connection
內部處理 (utf8)
↓ character_set_results
應用程式 接收顯示
三者不一致即亂碼。生產環境建議全鏈路 utf8mb4,避免轉碼損耗與錯誤。
my.ini 不重啟服務 → 不生效SET NAMES utf8 但表編碼為 latin1 → 存入仍錯誤utf8 (MySQL 3 字節子集) 和 utf8mb4 (完整 Unicode) → Emoji 存入截斷