Python 字节字符串太长

Python 字节字符串太长,python,ubuntu-16.04,freetds,pypyodbc,Python,Ubuntu 16.04,Freetds,Pypyodbc,在尝试在SQL Server数据库(驻留在Windows上)中插入行时,使用FreeTDS和Python3.5库PyODBC,我得到了一个“字节字符串太长”。 在FreeTDS conf文件下,有一个可值的“文本大小”,我将其更改为: [global] text size = 4294967295 这是配置文件 /etc/freetds/freetds.conf [global] tds version = 4.2 text size = 4294967295 [sq

在尝试在SQL Server数据库(驻留在Windows上)中插入行时,使用FreeTDS和Python3.5库PyODBC,我得到了一个
“字节字符串太长”
。 在FreeTDS conf文件下,有一个可值的
“文本大小”
,我将其更改为:

[global]
text size = 4294967295
这是配置文件

/etc/freetds/freetds.conf
[global]
      tds version = 4.2
      text size = 4294967295

[sqlserver]
      host = 192.168.0.3
      port = 1433
      tds version = 8.0

/etc/odbc.ini
[sqlserverdatasource]
Driver = freetds
Description = SQL Server
Servername = sqlserver
Database = MyDB
TDS_Version = 8.0

/etc/odbcinst.ini    
[freetds]
Description = MS SQL
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
Trace = Yes
TraceFile = /tmp/freetds.log
FileUsage = 1
UsageCount = 1
执行
'tsql-C'

Compile-time settings (established with the "configure" script)
                            Version: freetds v0.91
             freetds.conf directory: /etc/freetds
     MS db-lib source compatibility: no
        Sybase binary compatibility: yes
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 4.2
                              iODBC: no
                           unixodbc: yes
              SSPI "trusted" logins: no
                           Kerberos: yes
执行
'/usr/bin/tsql-S 192.168.0.3-U user'

Password: 
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
执行
'odbcinst-j'

unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/metheUser/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
Python PYODBC连接字符串:

connStr = 'DSN=sqlserverdatasource;Database=MyDB;uid=user;pwd=password'

但是错误不断出现,我遗漏了什么?

我最终发现了问题,除了在TDS_Version=8.0中设置之外,PyODBC中字符缓冲区的分配是不够的。我的查询超过3100个字符(至少)。直接更新pyodbc使其数量增加一倍就足够了。不确定是否需要翻两番

为什么没有将其添加到库中?有关更多信息:


感谢您帮助我解决这些可能性,并在他自己的环境中进行测试。

发布您的代码。我们还需要知道SQL表的定义。直接从SQLManagementStudio执行相同的命令,它就成功了。该列为nvarchar(最大值)。我现在正在搜索为什么FreeTDS在运行以下命令时仍然使用版本4.2:tsql-C@user0187409-尝试将
TDS\u Version=7.3
添加到连接字符串(或odbc.ini中的DSN条目)中,看看这是否有帮助(参考:)。有趣的。。。现在它给了我一个不同的错误:“使用DB Library(如ISQL)或ODBC版本3.7或更早版本,无法将仅Unicode排序规则或ntext数据中的Unicode数据发送到客户端。”在连接字符串中也尝试了TDS_版本=8.0,但仍然给出相同的“字符串太长”错误。如果使用TDS_Version=7.4,则会给我相同的“仅Unicode格式的Unicode数据…”错误。当我遇到此错误时,此堆栈溢出问题最终成为我的解决方案: