在 macOS 上使用 MySQL 時,中文數據無法寫入是典型的編碼不一致問題。本文記錄從服務端配置到表結構的三層級排查流程,助你一次性徹底解決。
macOS 預設無 /etc/my.cnf,需從安裝目錄 support-files/ 複製任意 my-*.cnf 模板至 /etc/my.cnf(注意目錄拼寫:/etc 非 /ect)。
在配置文件中添加以下設定:
[client]
default-character-set = utf8
[mysqld]
default-storage-engine = INNODB
character-set-server = utf8
collation-server = utf8_general_ci
重啟 MySQL 服務使配置生效。此步驟確保服務端、客戶端連接、新建資料庫預設均為 UTF-8。
使用 Workbench 或命令行檢查資料庫編碼:
SHOW CREATE DATABASE your_db_name;
-- 或修改資料庫編碼
ALTER DATABASE your_db_name CHARACTER SET utf8 COLLATE utf8_general_ci;
若資料庫編碼正確但問題仍在,進入第三層排查。
這是最常被忽略卻最關鍵的一步。即使服務端與資料庫編碼正確,現有表的 VARCHAR/TEXT 欄位可能仍保留 latin1 編碼。
SHOW CREATE TABLE your_table_name;
-- 觀察欄位定義中的 CHARSET=latin1
-- 修改欄位編碼
ALTER TABLE your_table_name MODIFY COLUMN col_name VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 或整表轉換
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
完成三層檢查後,重新測試中文插入。建議新專案從建庫建表階段就顯式指定 CHARSET=utf8mb4(支援 Emoji),避免遺留問題。另可在應用層連接字串添加 characterEncoding=utf8 雙重保險。