萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 匯入報錯 #1064 語法錯誤解析:USING BTREE 位置、保留字衝突、字元集與版本相容性

使用 SQLyog/phpMyAdmin 匯出 SQL 再匯入時,常見 ERROR 1064: You have an error in your SQL syntax near 'USING BTREE' / 'DEFAULT CHARSET=utf8' / 'column_name'。本文針對三大主因(索引語法位置、保留字衝突、字元集/版本差異)提供針對性修復方案。

錯誤一:USING BTREE 語法位置錯誤

錯誤 SQL

UNIQUE KEY `pkey` (`pkey`) USING BTREE

修正:將 USING BTREE 移至欄位清單前

UNIQUE KEY `pkey` USING BTREE (`pkey`)

原因: MySQL 版本差異,舊版要求 INDEX_TYPE 在欄位清單之前,新版兩者皆支援。統一調整為前置寫法可跨版本相容。

錯誤二:欄位名稱與 MySQL 保留字衝突

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

解決步驟

  1. 檢查來源表校對規則: phpMyAdmin 瀏覽表列表,查看 Collation (如 gbk_chinese_ci、utf8_general_ci)。
  2. 匯出前設定 phpMyAdmin 語言:
    • 來源 Collation 為 gbk_chinese_ci → 語言選「中文 - Chinese simplified」 (非 gb2312)。
    • 來源 Collation 為 gb2312_chinese_ci → 語言選「中文 - Chinese simplified - gb2312」。

    此步驟決定匯出 SQL 字串字面值的編碼,關鍵!

  3. 匯入時指定檔案字元集: 進入 phpMyAdmin 首頁,查看「MySQL 字元集」(如 UTF-8 Unicode (utf8)),匯入介面「檔案字元集」選同值 (utf8)。
  4. 或命令列強制: mysql --default-character-set=utf8mb4 dbname < backup.sql

DedeCMS 專用建議

DedeCMS 內建資料庫備份/還原功能 (系統 → 資料庫備份/還原),**優先使用原生工具**,避免第三方工具產生相容性問題。

版本相容性檢查清單

項目檢查點修正建議
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,匯出入顯式指定

通用修復流程

  1. 用編輯器開啟 .sql,搜尋報錯行號附近語法。
  2. 依上述三類錯誤修正 (USING BTREE 位置、加反引號、調整字元集)。
  3. 分段匯入驗證 (大檔案可切分)。
  4. 若大量報錯,考慮改用 mysqldump --compatible=mysql40 產出相容舊版 SQL。

系統性修正語法位置、識別符引用與字元集對齊,即可消除 #1064 匯入阻礙,實現跨版本、跨工具平滑遷移。

copyright © 萬盛學電腦網 all rights reserved