You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从MS SQL Server 2014导入导出向导导出至MySQL时遇语法错误

解决SQL Server导出到MySQL时的ODBC语法错误问题

我来帮你拆解这个问题,从错误信息就能定位到核心原因——MySQL 5.6和ODBC 8.0驱动的标识符语法兼容冲突,下面是具体分析和解决方案:

错误根源分析

你看到的错误语句"shipyards" ("shipyard_id", "shipyard") VALUES (?, ?),问题出在双引号"上:

  • MySQL 5.6默认的sql_mode不允许用双引号包裹表名/列名,它只识别反引号`作为标识符引号
  • 而你用的ODBC 8.0驱动默认遵循ANSI SQL标准,会用双引号来标识表和列,这就导致MySQL报错语法错误

分步解决方案

1. 修改MySQL的sql_mode启用ANSI_QUOTES

这是最直接的解决方法,让MySQL支持双引号标识符:

  • 临时生效:登录MySQL客户端,执行以下命令,然后重新打开ODBC连接:
    SET GLOBAL sql_mode = 'ANSI_QUOTES';
    
  • 永久生效:找到MySQL的配置文件(Windows是my.ini,一般在MySQL安装目录下;Linux是my.cnf),在[mysqld]节点下添加:
    sql_mode = ANSI_QUOTES
    
    保存后重启MySQL服务即可。

2. 调整ODBC数据源的配置

也可以在驱动层面关闭双引号标识符的使用:

  • 打开Windows的「ODBC数据源管理器(64位)」,找到你配置的MySQL数据源,点击「编辑」
  • 切换到「高级」或「详细信息」标签,找到SQL_QUOTES_ANSI选项,取消勾选;或者直接在连接字符串末尾加上ANSI_QUOTES=0
  • 保存配置后重新运行导出向导

3. 检查并修正表列映射

虽然错误主要是引号问题,但还是确认下映射避免其他坑:

  • 在导出向导的「列映射」步骤,确认目标表shipyards的shipyard_id(int)和shipyard(varchar(55))分别对应源库的同类型列
  • 可以尝试在向导里选择「编辑SQL」,手动把双引号替换成反引号,比如改成:
    `shipyards` (`shipyard_id`, `shipyard`) VALUES (?, ?)
    

4. 降级ODBC驱动版本(备选)

ODBC 8.0和MySQL 5.6的版本跨度较大,可能存在其他兼容性问题:

  • 卸载当前的mysql-connector-odbc-8.0.21,安装适配MySQL 5.6的5.3.x版本驱动(比如mysql-connector-odbc-5.3.13-winx64)
  • 重新配置ODBC数据源后再执行导出操作

内容的提问来源于stack exchange,提问作者Jason Holmes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 00:37:42