Java SSH 框架已配置 CharacterEncodingFilter (UTF-8),參數傳入正常,但數據庫存儲仍亂碼。根因:Mac 版 MySQL 默認字符集非 UTF-8,需修改配置文件強制指定。
-- 查看實例級字符集變量 SHOW VARIABLES LIKE '%char%'; -- 查看具體庫編碼 SHOW CREATE DATABASE test;
若顯示 latin1 或 gbk,確認需修改。
sudo -s cd /usr/local/mysql/support-files cp my-default.cnf /etc/my.cnf
cd /etc vim my.cnf
在 [client] 區塊末尾添加(5.5+ 版本此處無效,但保留兼容):
default-character-set=utf8
在 [mysqld] 區塊末尾添加核心三項:
default-storage-engine=INNODB character-set-server=utf8 collation-server=utf8_general_ci
💡 MySQL 5.5+ 不再支持 [mysqld] 下的 default-character-set,必須用 character-set-server。
# ESC → :wq 保存退出 # 重啟方式(視安裝方式): # 1. 系統偏好設置 → MySQL → Stop/Start # 2. 或命令行 sudo /usr/local/mysql/support-files/mysql.server restart
SHOW VARIABLES LIKE '%char%'; -- 期望輸出關鍵變量均為 utf8 / utf8_general_ci character_set_server=utf8 collation_server=utf8_general_ci character_set_database=utf8
再次執行中文寫入測試,亂碼問題解決。
utf8 實為 utf8mb3,不支援 Emoji 及罕見漢字。生產環境建議:
character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci
並確保連接層(JDBC URL、框架配置)同步指定 characterEncoding=utf8mb4。
Mac MySQL 中文亂碼核心在 /etc/my.cnf 缺失服務端字符集聲明。按本文步驟補全 [mysqld] 三項配置並重啟,即可徹底解決。新項目請直接採用 utf8mb4 避免未來升級成本。