8

我有一个 Python 程序,它使用 ODBC 连接连接到 MSSQL 数据库。我使用的 Python 库是 pypyodbc。

这是我的设置:

  • 视窗 8.1 x64
  • SQL Server 2014 x64
  • 蟒蛇 2.7.9150
  • PyPyODBC 1.3.3
  • ODBC 驱动程序:SQL Server Native Client 11.0

我遇到的问题是,当我查询带有 varchar(max) 列的表时,内容被截断。

我是 pypyodbc 的新手,我一直在疯狂地寻找,找不到任何关于如何防止这种情况在 pypyodbc 甚至 pyodbc 中发生的信息。至少不是我一直在使用的搜索词,而且我不知道要尝试哪些其他短语。

我什至尝试添加SET TEXTSIZE 2147483647;到我的 SQL 查询中,但数据仍然被截断。

我该如何防止这种情况发生?或者你能指出我正确的方向吗?

更新:

因此,我尝试在我的 SQL 查询中执行强制转换。当我这样做CAST(my_column as VARCHAR(MAX))时,它会在同一位置截断。但是,如果我这样做CAST(my_column as VARCHAR(8000)),它会给我一个更大的文本集,但它仍然会截断一些内容。如果我尝试做任何比8000我更大的事情,我会收到一个错误,说这8000是我可以使用的最大的。有人知道这里可能会发生什么吗?MAX使用不起作用似乎很奇怪。

4

3 回答 3

12

好吧,我最终解决了这个问题。我找到了这个关于类似问题的链接,只是在 python 中没有,他们发现问题出在 SQL Server 本机客户端驱动程序上。他们建议改用 SQL Server 标准驱动程序。

因此,我将 ODBC 连接字符串中的驱动程序从SQL Server Native Client 11.0to更改为SQL Server运行良好!我在我的 MSSQL 数据表中获取了 VARCHAR(MAX) 列的全部内容。

我真的希望这对遇到此问题的其他人有用!祝你好运!

这是链接: http ://www.sqlservercentral.com/Forums/Topic1534163-391-1.aspx

于 2015-11-24T01:25:14.127 回答
8

“{SQL Server}”在我的情况下不起作用。如果数据库在我的本地计算机上,“{SQL Server}”就可以很好地工作。但是,如果我尝试连接到远程服务器,总是会返回以下错误消息:

pypyodbc.DatabaseError: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SSL 安全错误')

对于那些仍在VARCHAR(MAX)截断中苦苦挣扎的人,我的同事提出的一个绝妙的解决方法是将VARCHAR(MAX)转换为TEXT类型。

假设我们有一个名为 note 的列,它的数据类型是VARCHAR(MAX),而不是 using SELECT note FROM notebook,而是写入 in SELECT CAST(note AS TEXT) FROM notebook

希望能帮助到你!

于 2018-11-08T03:53:24.960 回答
2

我假设您使用的是 FreeTDS,因为我以前见过这个问题。在您的 freetds.conf 文件中,可能在 [global] 下:

[global]
text size = 64512

根据您的 SQL Server 版本,将其更改为:

[global]
text size = 4294967295

您还需要更改任何 DSN。

如果这不是问题,我们将需要更多信息:您是从 Linux 还是 Windows 连接?哪个版本的 SQL Server?你用什么驱动连接的?

于 2015-11-23T19:19:37.380 回答