在使用 Heritrix 開發爬蟲專案時,MySQL 的中文編碼問題與數據遷移需求讓我踩了不少坑。這篇文章記錄了從環境配置、mysqldump 版本衝突,到透過命令列匯出 Excel 與 SQL 腳本的完整實戰過程,希望能幫助遇到相同問題的開發者快速定位解決方案。
作業環境:Mac OS X 10.8.3、MySQL Community Server 5.6.10、MySQL Workbench 5.2.47。
需求是將本機資料庫遷移至另一台伺服器。最初嘗試使用 Workbench 內建的 Import/Export 功能(底層呼叫 mysqldump),卻遭遇版本不一致錯誤,導致無法正常匯出。




經排查,Workbench 預設呼叫的 mysqldump 版本與伺服器不匹配。解決方法是手動指定 MySQL 安裝目錄下的 mysqldump 可執行檔:
/usr/local/mysql/bin/mysqldump
如此即可正常將資料匯出為包含 INSERT 語句的 SQL 檔案。
由於業務需求要求匯出 Excel,需透過 MySQL 命令列客戶端,使用 SELECT ... INTO OUTFILE 語句直接輸出 CSV/Excel 相容檔案。下文分別說明兩種匯出方式的操作步驟。
cd /usr/local/mysql/bin/
語法:./mysql -h主機IP -u用戶名 -p密碼
範例:./mysql -hlocalhost -uroot -p123456
注意: 必須加上 ./ 前綴指定當前目錄下的執行檔。

SHOW DATABASES;
USE your_database_name;
每條指令必須以英文分號 ; 結尾。

我的資料庫編碼為 utf8,而 Excel 預設開啟編碼常為 gb2312(中文環境),直接匯出會導致中文亂碼。解決方法是在查詢中使用 CONVERT() 函式轉換字符集:
SELECT
id,
CONVERT(name USING gbk) AS name,
CONVERT(description USING gbk) AS description
FROM your_table
INTO OUTFILE '/tmp/export_data.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';

權限提示: 嘗試匯出到桌面(/Users/username/Desktop/)時提示權限不足,這是因為 MySQL 服務進程(通常以 mysql 用戶運行)無權寫入該目錄。使用相對路徑 ./export_data.csv 時,檔案實際會寫入 /usr/local/mysql/data/ 目錄下,該目錄通常擁有寫入權限。打開檔案確認,中文顯示正常,亂碼問題解決。
使用指定路徑的 mysqldump 即可:
/usr/local/mysql/bin/mysqldump -h localhost -u root -p your_database > /path/to/backup.sql
此方式產出標準 SQL 腳本,包含建表語句與資料插入語句,適合跨版本遷移或備份還原。
mysqldump 版本與目標 MySQL 服務版本匹配,或手動指定路徑。CONVERT(col USING gbk) 或 gb2312 預轉編碼,避免中文亂碼。INTO OUTFILE 的目標路徑必須為 MySQL 服務進程可寫入的目錄(通常為 datadir 或 tmpdir 指定的路徑),不可寫入用戶家目錄。FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n' 確保 Windows 下換行正常。掌握這些技巧,無論是資料遷移、備份還是報表匯出,都能遊刃有餘地處理 MySQL 中文編碼與匯出格式問題。