亂碼本質:編碼不一致。資料庫儲存編碼、連線傳輸編碼、應用程式編碼三者任一不匹配即產生亂碼。
SHOW CREATE TABLE tbl 確認 CHARSET=utf8mb4 (推薦) 或 utf8/gbk。characterEncoding=utf8 (JDBC) 或執行 SET NAMES utf8mb4。<meta charset="utf-8">、控制台編碼一致。-- 庫級
ALTER DATABASE db_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
-- 表級 (含現有欄位轉換)
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 單欄位
ALTER TABLE tbl_name MODIFY col_name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
jdbc:mysql://localhost:3306/db?characterEncoding=utf8&useSSL=false (8.0+ 預設 UTF-8 可省略)charset=utf8mb4 在 DSN 中charset='utf8mb4' 參數SET NAMES utf8mb4# 1. MySQL 終端直接插入測試
INSERT INTO tbl (col) VALUES ('測試中文');
SELECT * FROM tbl; -- 終端顯示正常?
# 2. 應用打印實際 SQL
# 檢查 SQL 字串是否已含亂碼/問號
# 3. 檢查連線字串參數
mysql -u root (無 -p 密碼為空) 才有 root 權限。my.ini 中 [mysqld] character-set-server=utf8mb4 生效需重啟服務。深入理解 SET NAMES 三個變數:character_set_client / connection / results 關係圖解