MySQL 連線涉及四個關鍵字符集環節:
客戶端 → 連線層 → 資料庫層 → 結果集 character_set_client → character_set_connection → character_set_database → character_set_results
任一環節編碼不匹配即產生亂碼。
SHOW VARIABLES LIKE 'character_set_%';
重點觀察上述四個變數值是否一致。
SET NAMES utf8mb4;
等同於同時設定 client、connection、results 三個變數。
CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE TABLE users ( name VARCHAR(50) CHARACTER SET utf8mb4 ) DEFAULT CHARACTER SET utf8mb4;
[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_general_ci [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4
修改後重啟 MySQL 服務。
jdbc:mysql://host:3306/db?characterEncoding=utf8&useSSL=falsecharset='utf8mb4'charset=utf8mb4 in DSNMySQLXX(XX 為版本號,如 MySQL80)# 查看服務名 sc query type= service state= all | findstr MySQL # 啟動/停止(以 MySQL80 為例) net start MySQL80 net stop MySQL80
utf8 僅支援 3 字節字符,**生產環境請使用 utf8mb4** 支援 Emoji 等 4 字節字符