gpt4 book ai didi

mysql - 如何修复 SSIS 中的 ODBC Driver 8.0 SQL 语法错误?

转载 作者:可可西里 更新时间:2023-11-01 08:38:40 24 4
gpt4 key购买 nike

我有一个 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:

  1. Create an ADO.NET Connection Manager which uses the ODBC driver
  2. Set the connection manager’s RetainSameConnection property to True
  3. 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'
  4. 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com