MySQL 4.1 引入完整的字元集支援,舊版資料(通常為 gb2312/gbk)轉換為 utf8 時需謹慎操作。本文提供經實測的標準轉換流程。
mysqldump -u root -p database --add-drop-table --extended-insert > backup.sql
--add-drop-table:匯入時自動刪除舊表,免去手動建表--extended-insert:使用多行 INSERT 語法,減小檔案體積iconv -f gb2312 -t utf-8 backup.sql > backup_utf8.sql
重要:必須去除 BOM(Byte Order Mark),否則 MySQL 會報語法錯誤(ERROR 1064)。
gbk_bin → utf8_general_cigbk → utf8SET NAMES utf8;mysql -u root -p new_database < backup_utf8.sql
Got a packet bigger than 'max_allowed_packet' bytes 錯誤,修改 my.ini:
[mysqld]
max_allowed_packet = 10485760 # 10MB
重啟 MySQL 服務後重試。
資料庫轉碼完成後,應用程式需同步調整:
mysql_query("SET NAMES 'utf8'");(最常見,如 Discuz、PhpWind)<meta http-equiv="Content-Type" content="text/html; charset=utf-8">| 錯誤現象 | 原因 | 解決方法 |
|---|---|---|
| ERROR 1064 near '???' | SQL 檔案含 BOM | 以無 BOM 格式儲存 |
| 亂碼顯示 | 應用層未設 SET NAMES | 連接後立即執行 SET NAMES utf8 |
| 匯入中斷 | max_allowed_packet 過小 | 調大參數並重啟服務 |
遵循此流程,MySQL 4.1 編碼轉換可平滑完成,避免資料遺失與亂碼困擾。