【发布时间】:2017-09-09 19:22:42
【问题描述】:
使用 FreeTDS 和 Python3.5 库 PyPyodbc 尝试在 SQL Server 数据库(位于 Windows 上)中插入一行时,我得到了一个 'Byte string too long'。
在 FreeTDS conf 文件下有一个可变的 'text size' 我更改为:
[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 PyPyodbc 连接字符串:
connStr = 'DSN=sqlserverdatasource;Database=MyDB;uid=user;pwd=password'
但错误不断出现,我错过了什么?
【问题讨论】:
-
发布您的代码。我们还需要知道 SQL 表的定义。
-
直接从 SQL Management Studio 执行相同的命令,它成功了。该列是 nvarchar(MAX)。我现在正在搜索为什么 FreeTDS 在运行以下命令时一直使用 4.2 版:tsql -C
-
@user0187409 - 尝试将
TDS_Version=7.3添加到您的连接字符串(或 odbc.ini 中的 DSN 条目),看看是否有帮助(参考:here)。 -
很有趣...现在它给了我一个不同的错误:'Unicode 仅排序规则中的 Unicode 数据或 ntext 数据无法使用 DB-Library(如 ISQL)或 ODBC 版本 3.7 或早点。'
-
在连接字符串中也尝试过 TDS_Version=8.0 但仍然给出相同的“字符串太长”错误。如果使用 TDS_Version=7.4 给了我相同的 'Unicode data in Unicode-only...' 错误。
标签: python ubuntu-16.04 freetds pypyodbc