使用 Hibernate 將中文資料持久化到 MySQL 時出現亂碼,常見原因是資料庫實例字元集與應用預期不一致。本文提供經驗證有效的「重新配置 MySQL 實例字元集 + 重建資料庫」解決方案,適用於 Windows 環境下 MySQL Instance Configuration Wizard 管理的安裝。
???、锟斤拷)。my.ini 設定 default-character-set=gbk 後重啟仍無效。MySQL Windows 安裝精靈建立實例時,若未正確選擇字元集,資料檔案會以錯誤編碼初始化。單純修改設定檔無法改變已建立資料檔案的底層編碼,必須重新跑配置精靈並重建資料庫。
MySQLInstanceConfig.exe(通常在 bin/ 目錄)前幾步保持預設(Next),直到出現 Character Set 選項頁:

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)
再次執行 Hibernate 插入測試,中文應正常顯示,無亂碼。
my.ini 僅影響新連線協商,不改變磁碟上現有資料頁編碼。mysqld --initialize 指定 --character-set-server 重新初始化資料目錄「重新配置實例字元集 + 重建資料庫」是解決 Windows MySQL 歷史亂碼包袱的最乾淨方案。