在 Java 應用整合 MySQL 時,中文亂碼是高頻痛點。即使資料庫、應用均設為 UTF-8,若 JDBC 連線參數缺失,Hibernate 寫入資料時仍會出現亂碼。本文給出標準解決姿勢。
jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=utf8
useUnicode=true:啟用 Unicode 字符集支援。characterEncoding=utf8:明確指定連線傳輸編碼為 UTF-8(MySQL 內部為 utf8mb4 時亦建議寫 utf8,驅動會自動映射)。在 hibernate.cfg.xml 或 Spring dataSource Bean 定義中,& 必須轉義為 &:
<property name="connection.url">
jdbc:mysql://localhost:3306/fdoa?useUnicode=true&characterEncoding=utf8
</property>
若直接寫 &,XML 解析器會報錯或參數失效,導致編碼不生效。
| 層級 | 檢查項目 | 建議值 |
|---|---|---|
| 資料庫 | 字符集 / 排序規則 | utf8mb4 / utf8mb4_unicode_ci |
| 資料表 | CREATE TABLE ... CHARSET=utf8mb4 | utf8mb4 |
| 欄位 | VARCHAR/TEXT 字符集 | utf8mb4 |
| 連線 | JDBC URL 參數 | useUnicode=true&characterEncoding=utf8 |
| 應用 | 專案編碼 / Tomcat URIEncoding | UTF-8 |
| Hibernate | hibernate.connection.CharSet | utf8(可選,URL 已覆蓋) |