我有一个 SSIS 包,用于将数据从 MySQL 数据库导出到 SQL 数据库。 出于某种原因,我只能使用 ODBC 源项读取数据,但无法预览表格,而且在进行其他一些测试时,我发现我也无法使用 ODBC 目标项插入数据。
每当我尝试时,我都会收到此错误:
ERROR [42000] [MySQL][ODBC 8.0(w) Driver][mysqld-5.7.23]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 "
TABLENAME
" at line 1 (myodbc8w.dll).
我正在使用 MySQL 5.7.23 和 MySQL Connector/ODBC 8.0。我试过在 ANSI 和 Unicode 连接器之间切换;降级连接器版本(尝试使用 5.3、5.2 和 5.1);更改数据库、表和列编码;更改 ODBC 源项目中的数据访问模式(默认使用“表名”);重做任务。一切都会导致相同的错误,即使在不同的计算机和数据库上也是如此。
编辑:
使用@Hadi 的第二种解决方法会产生一些有趣的结果(第一种对我不起作用)。
使用 ADO.NET 或 ODBC 连接器,提供的查询导致错误。
Error Code: 1231. Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'
修改查询为之后
set sql_mode = 'STRICT_TRANS_TABLES, NO_ENGINE_SUBSTITUTION, ANSI_QUOTES'
错误变为警告。
set sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES' 0 row(s) affected, 1 warning(s): 3135 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release.
尽管如此,它还是起到了部分作用。任何选定表名周围的任何引号、重音符号或任何其他符号都必须删除。这使得它在插入数据时工作正常,但在检索数据时必须通过 SQL 命令或创建 2 个不同的连接来完成。
最佳答案
在搜索问题时,我发现了一些有用的链接,其中提到了一些解决方法:
(1) 连接MySQL问题
在此链接中,作者提到了两种连接 MySQL 的方法(使用 ODBC 和 ADO.net)。他提到,在尝试使用 ODBC 检索表时,他收到了您在问题中列出的相同错误,他提到了如下解决方案:
Switching to use a SQL query instead, and that worked just fine. I was able to pull back both the correct metadata, with one small problem - the varchar(50) columns came back with a length of 51. This resulted in some warnings, but the package ran correctly.
(2)写入MySQL问题
在这篇文章中,作者提到了如何使用 ADO.Net 目的地写入 MySQL 目的地,他提到了以下解决方案:
For the ADO.NET Destination to work properly, the MySQL database needs to have the ANSI_QUOTES SQL_MODE option enabled. This option can be enabled globally, or for a particular session. To enable it for a single session:
- Create an ADO.NET Connection Manager which uses the ODBC driver
- Set the connection manager’s
RetainSameConnection
property toTrue
- Add an
Execute SQL Task
before your data flow to set the SQL_MODE – Ex.set sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ANSI_QUOTES'
- Make sure that your Execute SQL Task and your
ADO.NET Destination
are using the same connection manager.
其他类似链接
关于mysql - 如何修复 SSIS 中的 ODBC Driver 8.0 SQL 语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54603370/