首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Hibernate + MySQL 中文亂碼終極解決:連接池、驅動、配置三層把關

     編輯:MySQL 資料庫相關知識

Hibernate 操作 MySQL 存取中文出現亂碼,核心在於「連接字符集協商」未統一。本文給出 hibernate.cfg.xml、Spring sessionFactory、驅動版本三層配置清單,一次修好。

核心配置(hibernate.cfg.xml)

<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">UTF-8</property>

完整片段:

<session-factory>
  <property name="connection.url">jdbc:mysql://localhost:3306/your_db?useUnicode=true&characterEncoding=UTF-8</property>
  <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  <property name="connection.useUnicode">true</property>
  <property name="connection.characterEncoding">UTF-8</property>
  <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  <!-- 其他 mapping -->
</session-factory>

Spring 整合時

在 LocalSessionFactoryBean 或 HibernateJpaVendorAdapter 中同樣設置上述兩屬性,或直接在 JDBC URL 追加參數:

<property name="dataSource">
  <bean class="com.zaxxer.hikari.HikariDataSource">
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"/>
    ...
  </bean>
</property>

關鍵環節檢查清單

  1. 驅動版本:mysql-connector-java 5.1.47+ 或 8.0.13+;舊版 3.x 不支持 characterEncoding 參數。
  2. 表/列字符集:CREATE TABLE ... DEFAULT CHARSET=utf8mb4,列無需單獨指定。
  3. MySQL 服務端:my.cnf [mysqld] 區段 character-set-server=utf8mb4,重啟生效。
  4. 過濾器:舊專案若用 CharacterEncodingFilter,確保 forceEncoding=true。

常見誤區

  • 僅在 Hibernate 配置 UTF-8 而 MySQL 服務端仍為 latin1 → 存入時已轉碼錯誤,讀出無法恢復。
  • 使用 utf8 而非 utf8mb4 → 無法存 Emoji/生僻字(MySQL utf8 實為 utf8mb3)。
  • 連接池未重建 → 修改配置後需重啟應用或刷新池。

驗證腳本

SHOW VARIABLES LIKE 'character_set_%';
-- 期望 client/connection/results/database/server 均為 utf8mb4
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved