首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Hibernate 連接 MySQL 中文亂碼終極解決方案

     編輯:MySQL 綜合教學

Hibernate 連接 MySQL 中文亂碼終極解決方案

在 Java 應用整合 MySQL 時,中文亂碼是高頻痛點。即使資料庫、應用均設為 UTF-8,若 JDBC 連線參數缺失,Hibernate 寫入資料時仍會出現亂碼。本文給出標準解決姿勢。

核心解決:JDBC URL 必加雙參數

jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=utf8
  • useUnicode=true:啟用 Unicode 字符集支援。
  • characterEncoding=utf8:明確指定連線傳輸編碼為 UTF-8(MySQL 內部為 utf8mb4 時亦建議寫 utf8,驅動會自動映射)。

XML 配置檔轉義陷阱

在 hibernate.cfg.xml 或 Spring dataSource Bean 定義中,& 必須轉義為 &:

<property name="connection.url">
    jdbc:mysql://localhost:3306/fdoa?useUnicode=true&amp;characterEncoding=utf8
</property>

若直接寫 &,XML 解析器會報錯或參數失效,導致編碼不生效。

完整驗證清單

進階:支援 Emoji 與補充字符

MySQL 5.5.3+ 引入 utf8mb4(真正的 UTF-8),若需儲存 Emoji:

  1. 資料庫/表/欄位全鏈路設為 utf8mb4。
  2. JDBC URL 改為:characterEncoding=utf8mb4(Connector/J 5.1.13+ 支援)或保持 utf8(驅動自動升級)。
  3. 連線池屬性加入:connectionInitSql=SET NAMES utf8mb4(HikariCP/Druid 支援)。

常見誤區

  • ❌ 僅設 SET NAMES utf8:僅影響當前 Session,連線池重用時失效。
  • ❌ 以為 characterEncoding=UTF-8(含連字號):MySQL 驅動識別 utf8,連字號會被忽略。
  • ❌ 忽略 XML 轉義:導致參數實際未傳遞給驅動。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
層級檢查項目建議值
資料庫字符集 / 排序規則utf8mb4 / utf8mb4_unicode_ci
資料表CREATE TABLE ... CHARSET=utf8mb4utf8mb4
欄位VARCHAR/TEXT 字符集utf8mb4
連線JDBC URL 參數useUnicode=true&characterEncoding=utf8
應用專案編碼 / Tomcat URIEncodingUTF-8
Hibernatehibernate.connection.CharSetutf8(可選,URL 已覆蓋)