当使用FreeTDS查询MS SqlServer时,Python会截断255个字符

时间:2012-11-14 15:30:23

标签: python pyodbc freetds

我想我在Debian机器上的FreeTDS上使用pyodbc从python查询中遗漏了一些东西。我无法设置超过前255个字符。

如果我尝试像这里描述的那样CAST SQL数据:ODBC query on MS SQL Server returning first 255 characters only in PHP PDO (FreeTDS)SELECT CAST(myText as TEXT) FROM mytable 我得到空/零长度字符串,

我也测试了没有更多的成功:改变大小如下面的配置描述,我只得到前255个字符(而在我的Win盒pyodbc可以得到279个字符,例如)。

这是一个示例查询:

SET TEXTSIZE 2147483647;
SELECT [id], myText , LEN(myText)
FROM    mytable

这是我的/etc/freetds/freetds/conf: (这是什么意思; @行的开头?)

[global]
    # TDS protocol version
;   tds version = 4.2


#!!!added by me
client charset = UTF-8
text size = 4294967295 
#!!!/added by me

    # Whether to write a TDSDUMP file for diagnostic purposes
    # (setting this to /tmp is insecure on a multi-user system)
;   dump file = /tmp/freetds.log
;   debug flags = 0xffff

    # Command and connection timeouts
;   timeout = 10
;   connect timeout = 10

    # If you get out-of-memory errors, it may mean that your client
    # is trying to allocate a huge buffer for a TEXT field.  
    # Try setting 'text size' to a more reasonable limit 
    #!!!changed by me
    #text size = 64512

其他conf文件是:

> cat /etc/odbc.ini #/etc/odbc.ini is empty! is it ok?
> cat /etc/odbcinst.ini
[FreeTDS]
Description=TDS driver (Sybase/MS SQL)
Driver=/usr/lib/odbc/libtdsodbc.so
Setup=/usr/lib/odbc/libtdsS.so
CPTimeout=
CPReuse=

我的SQL服务器在192.168.1.2上,我使用:

进行连接
cnstr = 'DRIVER={FreeTDS};SERVER=192.168.1.2;DATABASE=MyDBName;UID=MyUID;PWD=MYPASSWD'
cursor = cnxn.cursor()
cursor.execute(SQL)
# etc.

谢谢你的帮助,

最好的问候

1 个答案:

答案 0 :(得分:2)

  

是什么意思; @行首?

它开始发表评论。 man freetds.conf 是你的朋友。 : - )

  

我无法设置超过前255个字符。

我怀疑您使用的是协议版本4.2,因为您使用的是无DSN连接,并且未提及设置默认值。另外因为TDS 4.2将VARCHAR列限制为255个字符。

您可以将协议版本添加到连接字符串中,参见http://www.freetds.org/userguide/odbcconnattr.htm