接手數十 MB 的 MySQL 腳本檔,phpMyAdmin 匯入易逾時。本文實測流程:MySQL-Front 建立空庫 → 命令列 mysql 客戶端還原,**關鍵在於識別 SQL 檔案真實編碼並對應設定 SET NAMES**,否則中文全亂碼。
觀察腳本含 DEFAULT CHARSET=gbk,但**不可輕信**,仍需驗證檔案實際編碼。
mysql -u root -p
-- 輸入密碼進入 mysql>
USE target_db;
.sql 檔。SET NAMES utf8; -- 注意:utf8 不含連字號,非 utf-8
SOURCE /path/to/backup.sql;
MySQL-Front 開啟資料表,中文欄位正常顯示,無亂碼。
| SQL 檔案實際編碼 | mysql> 設定指令 | 常見誤區 |
|---|---|---|
| UTF-8 (無 BOM) | SET NAMES utf8; | 設定 SET NAMES utf-8 (錯誤)、SET CHARACTER SET utf8 (不完整) |
| GBK | SET NAMES gbk; | 同上 |
| Big5 | SET NAMES big5; | 同上 |
| UTF-8 with BOM | SET NAMES utf8; (需先移除 BOM) | BOM 導致首行語法錯誤 |
SET NAMES utf8 等同於同時設定三個系統變數:
SET character_set_client = utf8;
SET character_set_connection = utf8;
SET character_set_results = utf8;
character_set_client 解碼 → 伺服器依 character_set_connection 處理 → 儲存依表/欄位字元集 (必要時轉換)。-- 在 SOURCE 前執行 (需 SUPER 權限)
SET SESSION sql_log_bin = 0;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;
SET AUTOCOMMIT = 0;
SOURCE /path/backup.sql;
SET FOREIGN_KEY_CHECKS = 1;
SET UNIQUE_CHECKS = 1;
SET AUTOCOMMIT = 1;
-- 最後 COMMIT;
COMMIT;
DEFAULT CHARSET= 宣告。SET NAMES 值**不含連字號** (utf8 非 utf-8)。COMMIT 並驗證關鍵表筆數與中文欄位。「編碼識別正確、SET NAMES 對應、大檔優化參數」三步走,命令列還原 phpMyAdmin 匯出檔案,穩定、高效、零亂碼。