插入中文顯示「???」或亂碼,查詢報錯 Incorrect string value。
**全鏈路字符集不一致**:客戶端、連接層、服務端、庫、表、列任一環節編碼不匹配即發生轉碼錯誤或截斷。
[client]
default-character-set=gbk
[mysqld]
character-set-server=gbk
collation-server=gbk_chinese_ci
mysql -u root -p
> STATUS;
-- 關鍵輸出應全為 gbk:
Server characterset: gbk
Db characterset: gbk
Client characterset: gbk
Conn. characterset: gbk
CREATE DATABASE mydb DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
CREATE TABLE t (c VARCHAR(20)) DEFAULT CHARSET=gbk;
jdbc:mysql://host:3306/mydb?useUnicode=true&characterEncoding=GBK&autoReconnect=true
[client]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE t (c VARCHAR(100)) DEFAULT CHARSET=utf8mb4;
-- 客戶端
SET NAMES utf8mb4;
-- JDBC 8.0+ 可無參數自動協商,舊版顯式
jdbc:mysql://host:3306/mydb?characterEncoding=utf8mb4&useSSL=false
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 應全為 utf8mb4 / utf8mb4_unicode_ci
utf8 在 MySQL 中實為 utf8mb3,**不支持 Emoji/補充字符** (4 字節),插入會截斷報錯。**必須用 utf8mb4**。ALTER TABLE ... CONVERT TO CHARACTER SET utf8mb4 重寫數據。connectionInitSqls: SET NAMES utf8mb4 確保每次獲取連接重置字符集。--default-character-set=utf8mb4 避免導出轉碼錯誤。