使用 Navicat 進行 MySQL 數據傳輸時遇到 [Err] [Dtf] 1064 - You have an error in your SQL syntax... 錯誤,通常是目標庫版本不兼容、保留字衝突、或導出 SQL 包含不支持語法導致。本文提供系統排查步驟。
[Err] [Dtf] 1064 - You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near 'bSize,pagSize;' at line 25
1064:MySQL 語法錯誤代碼near 'bSize,pagSize;':錯誤發生位置附近的 SQL 片段at line 25:導出腳本第 25 行現象: 源庫 MySQL 8.0,目標庫 MySQL 5.7/5.6。高版本特有語法(如 DEFAULT CURRENT_TIMESTAMP、VISIBLE/INVISIBLE INDEX、CHECK 约束)低版本不支持。
解決:
現象: 表名/列名使用了 size、order、group、key 等保留字,導出 SQL 未加 ` 包裹。
解決:
現象: 導出包含 DEFINER=`root`@`%`,導入目標庫無此用戶。
解決:
sed -i 's/DEFINER=[^ ]* //g' dump.sql現象: 源庫 utf8mb4,目標庫 latin1,導致 COLLATE utf8mb4_0900_ai_ci 報錯。
解決:
CREATE DATABASE db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;現象: 源庫 NO_ENGINE_SUBSTITUTION,目標庫 STRICT_TRANS_TABLES,導致隱式類型轉換報錯。
解決:
SET SESSION sql_mode = '';(臨時放寬)sql_mode| 選項 | 推薦設置 | 說明 |
|---|---|---|
| 格式 | SQL | 可編輯、可版本控制 |
| 編碼 | UTF-8 | 避免中文亂碼 |
| 包含 | 結構 + 數據 | 完整遷移 |
| 兼容模式 | 目標庫版本 | 關鍵! |
| 引用標識符 | 反引號 ` | 防保留字衝突 |
| DEFINER | 不包含 | 避免用戶不存在錯誤 |
| 事務 | 單表事務 / 批量提交 | 大數據量提高性能 |
大數據量(>1GB)建議用原生工具,更穩定、可控:
# 導出
mysqldump -h src_host -u user -p --single-transaction --routines --triggers --events \
--set-gtid-purged=OFF --default-character-set=utf8mb4 db_name > dump.sql
# 導入
mysql -h dst_host -u user -p --default-character-set=utf8mb4 db_name < dump.sql
Navicat 1064 錯誤 90% 源於版本不兼容或標識符未轉義。核心對策:導出時選正確兼容模式、強制反引號、去除 DEFINER、統一字符集。大數據遷移首選 mysqldump + mysql 命令行。