MySQL中的SELECT*通过Microsoft SQL Server的ODBC出现问题

Gin*_*kas 8 mysql sql-server odbc

我有一个MySQL服务器作为Microsoft SQL Server 2008中的链接服务器.对于链接,我使用MySQL ODBC Connector版本5.1.8.使用OPENQUERY(我发现执行查询的唯一方法)调用查询时,会出现问题.简单的查询,例如

SELECT * FROM OPENQUERY(MYSQL, 'SHOW TABLES')
Run Code Online (Sandbox Code Playgroud)

工作得很好.选择单个列,例如,

SELECT * FROM OPENQUERY(MYSQL, 'SELECT nr FROM letter')
Run Code Online (Sandbox Code Playgroud)

工作正常,但SELECT*语法不起作用.查询:

SELECT * FROM OPENQUERY(MYSQL, 'SELECT * FROM mytable')
Run Code Online (Sandbox Code Playgroud)

引发错误:

消息7347,级别16,状态1,行6 OLE DB提供程序'MSDASQL'用于链接服务器'MYSQL'返回的数据与列'[MSDASQL] .let_nr'的预期数据长度不匹配.(最大)预期数据长度为40,而返回的数据长度为0.

如何使SELECT*语法有效?

Tar*_*sta 13

我经历了同样的问题4天,但最后我找到了原因以及如何解决它.

如果您正在查询mySQL链接服务器并且您查询的表具有数据类型char(),则会发生此问题...这意味着固定长度NOT varchar().当您的固定长度字段的字符串短于sql server期望从odbc获得的最大长度时,会发生这种情况.

修复; 转到MySQL服务器并将数据类型更改为varchar(),保留长度,例如,char(10)将其更改为varchar(10).

这没问题.

如果修复它,请告诉我.

Tarek Basta


Gin*_*kas 10

在查询之前执行以下命令似乎有帮助:

DBCC TRACEON(8765)

错误消息消失,查询似乎工作正常.

我不确定它做了什么; 我在这里找到了它:http://bugs.mysql.com/bug.php?id = 46857

奇怪的是,SQL Server变得不稳定,停止响应查询,最后在几次查询到MySQL服务器几分钟后,在日志中崩溃与可怕的转储.我不确定这是否必须对DBCC命令做任何事情,所以我仍然对这个问题的其他可能的解决方案感兴趣.

  • DBCC TRACEON(8765)为我解决了这个问题.也没有不稳定问题. (2认同)