首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

解決 Hibernate + MySQL 中文亂碼:數據表字符集與連接編碼配置指南

     編輯:Java 相關知識

根因分析

中文亂碼通常由三處編碼不一致導致:

  1. 數據庫/表/列字符集
  2. JDBC 連接 URL 編碼參數
  3. Hibernate 配置的連接編碼屬性

Windows 環境(默認 GBK/GB2312)

1. 創建表指定字符集

CREATE TABLE test (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) DEFAULT CHARACTER SET gb2312;

2. hibernate.cfg.xml 配置

<property name="connection.url">
    jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=gb2312
</property>
<property name="connection.characterEncoding">gb2312</property>

Linux/生產環境(推薦 UTF-8)

1. 數據庫/表統一 UTF-8

CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE test (...) DEFAULT CHARACTER SET utf8mb4;

2. 連接 URL 與 Hibernate 配置

<property name="connection.url">
    jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
</property>
<property name="connection.characterEncoding">utf8</property>

驗證步驟

  1. 在 MySQL 客戶端執行 SHOW VARIABLES LIKE 'character%'; 確認服務端編碼。
  2. 檢查表結構 SHOW CREATE TABLE test; 確認表級字符集。
  3. Hibernate 啟動日誌中查看 connection.characterEncoding 生效值。
  4. 插入中文測試數據,查詢對比。

常見坑點

  • MySQL utf8 實為 utf8mb3,無法存儲 Emoji,必須用 utf8mb4。
  • JDBC URL 中 characterEncoding 優先級高於 Hibernate 配置屬性,保持一致。
  • Tomcat server.xml 中 URIEncoding="UTF-8" 僅影響 GET 參數解碼,不影響 JDBC 連接。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved