Hibernate + MySQL 中文問題 90% 來自 **三層編碼不一致**。
| 層級 | 配置位置 | 標準值 |
|---|---|---|
| 資料庫/表/欄位 | DDL / my.cnf | CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |
| JDBC 連線 | hibernate.cfg.xml / Spring DataSource | useUnicode=true&characterEncoding=UTF-8 |
| Web 請求/回應 | web.xml Filter / Spring CharacterEncodingFilter | UTF-8 |
jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Taipei
root
pwd
com.mysql.cj.jdbc.Driver
utf8mb4
utf8mb4
true
# application.yml
server:
servlet:
encoding:
charset: UTF-8
force: true
force-request: true
force-response: true
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
encodingFilter
/*
SHOW VARIABLES LIKE 'character_set%'; 全為 utf8mb4SHOW CREATE TABLE t\G 顯示 CHARSET=utf8mb4session.save(new Entity("測試")); 無報錯
4. 查詢中文:list.get(0).getName() 顯示正常
5. 瀏覽器 Network:Response Header Content-Type: text/html; charset=UTF-8
核心:**資料庫 utf8mb4 + JDBC useUnicode=true&characterEncoding=UTF-8 + Web Filter UTF-8**,三層缺一不可。