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

Hibernate 寫入 MySQL 中文亂碼終極解法:重新配置 MySQL 字元集為 GBK 並重建資料庫

     編輯:MySQL 綜合教學

Hibernate 寫入 MySQL 中文亂碼終極解法:重新配置 MySQL 字元集為 GBK 並重建資料庫

使用 Hibernate 將中文資料持久化到 MySQL 時出現亂碼,常見原因是資料庫實例字元集與應用預期不一致。本文提供經驗證有效的「重新配置 MySQL 實例字元集 + 重建資料庫」解決方案,適用於 Windows 環境下 MySQL Instance Configuration Wizard 管理的安裝。

問題現象

  • Hibernate 正常插入資料,但中文欄位在資料庫顯示為亂碼(如 ???、锟斤拷)。
  • 修改 my.ini 設定 default-character-set=gbk 後重啟仍無效。

根因

MySQL Windows 安裝精靈建立實例時,若未正確選擇字元集,資料檔案會以錯誤編碼初始化。單純修改設定檔無法改變已建立資料檔案的底層編碼,必須重新跑配置精靈並重建資料庫。

解決步驟

步驟 1:啟動 MySQL Server Instance Configuration Wizard

  • 開始功能表 → MySQL → MySQL Server Instance Config Wizard
  • 或直接執行 MySQLInstanceConfig.exe(通常在 bin/ 目錄)

步驟 2:重新配置語言選項為 GBK

前幾步保持預設(Next),直到出現 Character Set 選項頁:

MySQL 配置精靈字元集選擇 GBK

  • 選擇 GBK(或 UTF-8,視應用編碼而定)
  • 完成後續步驟至 Finish,精靈會重新初始化資料目錄並重啟服務

步驟 3:刪除舊資料庫並重建

mysql -u root -p
mysql> DROP DATABASE old_db;
mysql> CREATE DATABASE new_db CHARACTER SET gbk COLLATE gbk_chinese_ci;
-- 或由 Hibernate 自動建表(hbm2ddl.auto=create/update)

步驟 4:驗證中文存取

再次執行 Hibernate 插入測試,中文應正常顯示,無亂碼。

關鍵原則總結

  1. 字元集必須在實例初始化階段確定,事後修改 my.ini 僅影響新連線協商,不改變磁碟上現有資料頁編碼。
  2. 應用、連線、資料庫、資料表、欄位五層字元集需保持一致(或相容轉換)。
  3. 新專案建議直接採用 UTF-8 / utf8mb4 全鏈路,避免 GBK 跨平台相容性問題。

適用場景提醒

  • Windows + MySQL Installer/Instance Config Wizard 部署模式
  • 已有資料且可接受重建資料庫(或可從備份還原)
  • Linux 環境請改用 mysqld --initialize 指定 --character-set-server 重新初始化資料目錄

「重新配置實例字元集 + 重建資料庫」是解決 Windows MySQL 歷史亂碼包袱的最乾淨方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved