2012-11-14 45 views
2

我想我错过了在Python上使用pyodbc通过FreeTDS在Debian机器上进行查询的内容。我无法设置超过前255个字符。当使用FreeTDS查询MS SqlServer时,Python截断255个字符

如果我尝试投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. 

感谢ü的任何帮助,

问候

回答

2

是什么的意思; @行首?

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

我不能管理超过前255个字符。

我怀疑你使用的是协议版本4.2,因为你使用的是DSN-less连接,并没有提到设置默认值。还因为TDS 4.2将VARCHAR列限制为255个字符。

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