首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Navicat 數據傳輸報錯 1064:SQL 語法錯誤排查指南

     編輯:程式設計綜合問答

使用 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 行

常見原因與解決方案

1. 版本不兼容:高版本導出 → 低版本導入

現象: 源庫 MySQL 8.0,目標庫 MySQL 5.7/5.6。高版本特有語法(如 DEFAULT CURRENT_TIMESTAMP、VISIBLE/INVISIBLE INDEX、CHECK 约束)低版本不支持。

解決:

  • Navicat 導出時選擇「兼容模式」:導出向導 → 選項 → 勾選「兼容 MySQL 5.6/5.7」
  • 或手動編輯 SQL 文件,移除不兼容語法
  • 升級目標庫版本(推薦)

2. 保留字作為標識符未加反引號

現象: 表名/列名使用了 size、order、group、key 等保留字,導出 SQL 未加 ` 包裹。

解決:

  • Navicat 設置:工具 → 選項 → 代碼編輯 → 勾選「使用反引號引用標識符」
  • 重新導出 SQL

3. 存儲過程/觸發器/視圖定義符(DEFINER)問題

現象: 導出包含 DEFINER=`root`@`%`,導入目標庫無此用戶。

解決:

  • 導出時勾選「不包含 DEFINER」
  • 或導入前批量替換:sed -i 's/DEFINER=[^ ]* //g' dump.sql

4. 字符集/排序規則不匹配

現象: 源庫 utf8mb4,目標庫 latin1,導致 COLLATE utf8mb4_0900_ai_ci 報錯。

解決:

  • 目標庫預先創建:CREATE DATABASE db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 導出時指定字符集

5. SQL 模式(sql_mode)差異

現象: 源庫 NO_ENGINE_SUBSTITUTION,目標庫 STRICT_TRANS_TABLES,導致隱式類型轉換報錯。

解決:

  • 導入前執行:SET SESSION sql_mode = '';(臨時放寬)
  • 或統一雙端 sql_mode

系統排查步驟

  1. 定位行號:打開導出的 SQL 文件,跳轉到報錯行(示例第 25 行)
  2. 上下文查看:查看前後 10-20 行,確認完整語句
  3. 對照手冊:查閱目標 MySQL 版本《參考手冊》對應語法章節
  4. 最小復現:提取報錯語句單獨在目標庫執行,確認錯誤
  5. 修正並重試:修改 SQL 文件或調整導出/導入參數

Navicat 導出最佳實踐配置

選項推薦設置說明
格式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 命令行。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved