Linux(預設 UTF-8)與 Windows(預設 GBK)之間進行 MySQL 資料遷移,最常遇到的就是中文亂碼,甚至衍生出「Unknown MySQL server host」等連線錯誤。核心原因在於匯出與匯入的字元集不一致。本文提供標準化解決流程,確保跨平台遷移零亂碼。
mysqldump 預設使用作業系統預設字元集(Linux: UTF-8, Windows: GBK)。mysqldump -u root -p --default-character-set=utf8 dbname tablename > backup.sql
mysql -u root -p --default-character-set=utf8 dbname < backup.sql
--default-character-set 參數必須完全一致,且建議統一使用 utf8(或 utf8mb4 支援 Emoji)。backup.sql,確認編碼顯示為 UTF-8,中文內容可正常閱讀。SHOW VARIABLES LIKE 'character_set%';
SHOW CREATE TABLE tablename;
確認 character_set_database、character_set_server、資料表 DEFAULT CHARSET 皆為 utf8 / utf8mb4。
characterEncoding=utf8(JDBC)或執行 SET NAMES utf8(PHP/CLI)。| 錯誤做法 | 正確做法 |
|---|---|
| 僅修改 my.cnf/my.ini 的 default-character-set | 必須在 mysqldump/mysql 指令顯式指定參數 |
| 匯出用 utf8、匯入用 gbk(或反向) | 雙端統一同一字元集 |
| 直接用 phpMyAdmin 匯出再用命令列匯入 | phpMyAdmin 匯出時勾選「字元集:utf8」,匯入前執行 SET NAMES utf8 |
遵循「匯出指定、匯入指定、檔案驗證、連線一致」四步驟,即可徹底解決 MySQL 跨平台遷移亂碼問題,保障資料完整性。