使用 SQLyog/phpMyAdmin 匯出 SQL 再匯入時,常見 ERROR 1064: You have an error in your SQL syntax near 'USING BTREE' / 'DEFAULT CHARSET=utf8' / 'column_name'。本文針對三大主因(索引語法位置、保留字衝突、字元集/版本差異)提供針對性修復方案。
UNIQUE KEY `pkey` (`pkey`) USING BTREE
UNIQUE KEY `pkey` USING BTREE (`pkey`)
原因: MySQL 版本差異,舊版要求 INDEX_TYPE 在欄位清單之前,新版兩者皆支援。統一調整為前置寫法可跨版本相容。
DedeCMS 等系統常用 key、order、group、desc、type 等保留字作為欄位名。SQLyog 匯出的 INSERT 語句若**未加反引號 `**,會導致語法錯誤。
-- 錯誤
INSERT INTO table (key, order, type) VALUES (1, 2, 3);
-- 正確
INSERT INTO `table` (`key`, `order`, `type`) VALUES (1, 2, 3);
批次修正技巧: 用編輯器正則替換 \b(key|order|group|desc|type)\b → `$1` (需視編輯器支援度)。
ERROR 1064 ... near 'DEFAULT CHARSET=utf8' at line 1
Collation (如 gbk_chinese_ci、utf8_general_ci)。gbk_chinese_ci → 語言選「中文 - Chinese simplified」 (非 gb2312)。gb2312_chinese_ci → 語言選「中文 - Chinese simplified - gb2312」。此步驟決定匯出 SQL 字串字面值的編碼,關鍵!
UTF-8 Unicode (utf8)),匯入介面「檔案字元集」選同值 (utf8)。mysql --default-character-set=utf8mb4 dbname < backup.sqlDedeCMS 內建資料庫備份/還原功能 (系統 → 資料庫備份/還原),**優先使用原生工具**,避免第三方工具產生相容性問題。
| 項目 | 檢查點 | 修正建議 |
|---|---|---|
| MySQL 版本 | 來源 5.7 → 目標 5.5 | 避免使用 5.7 專有語法 (JSON、GIS、Generated Columns) |
| SQL_MODE | 嚴格模式差異 | 匯入前 SET SESSION sql_mode=''; 或對齊模式 |
| 預設引擎 | InnoDB vs MyISAM | 確認 ENGINE= 子句明確指定 |
| 字元集 | utf8 vs utf8mb4 | 統一 utf8mb4,匯出入顯式指定 |
mysqldump --compatible=mysql40 產出相容舊版 SQL。系統性修正語法位置、識別符引用與字元集對齊,即可消除 #1064 匯入阻礙,實現跨版本、跨工具平滑遷移。