sql-server-2008 – Debian Linux上的pyodbc / FreeTDS / unixODBC:TDS版本的问题

前端之家收集整理的这篇文章主要介绍了sql-server-2008 – Debian Linux上的pyodbc / FreeTDS / unixODBC:TDS版本的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Debian Lenny(5.0.7)上成功使用pyodbc有一些麻烦.具体来说,我似乎无法获取NVARCHAR值(不是sql Server专家,所以在我身上轻松):).

大多数传统查询工作正常.例如,table1中的行计数产生

cursor.execute("SELECT count(id) from table1")
<pyodbc.Cursor object at 0xb7b9b170>
>>> cursor.fetchall()
[(27,)]

像ids的完全转储一样

>>> cursor.execute("SELECT id FROM table1")
<pyodbc.Cursor object at 0xb7b9b170>
>>> cursor.fetchall()
[(0.0,),(3.0,(4.0,(5.0,(6.0,(7.0,(8.0,(11.0,(12.0,(18.0,(19.0,(20.0,(21.0,(22.0,(23.0,(24.0,(25.0,(26.0,(27.0,(28.0,(29.0,(32.0,(33.0,(34.0,(35.0,(36.0,(37.0,)]

但是一个名称的转储(再次,类型为NVARCHAR)没有

>>> cursor.execute("SELECT name FROM table1")
Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
pyodbc.ProgrammingError: ('42000','[42000] [FreeTDS][sql Server]Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as Isql) or ODBC version 3.7 or earlier. (4004) (sqlExecDirectW)')

…关键的错误

pyodbc.ProgrammingError:(‘42000′,'[42000] [FreeTDS] [sql Server]仅Unicode归类或ntext数据中的Unicode数据不能使用DB-Library(如Isql)或ODBC版本3.7或(4004)(sqlExecDirectW)’)

这在表格中是一致的.

我已经尝试过各种各样的版本,但现在我正在运行unixODBC 2.2.11(从lenny repos),FreeTDS 0.91(源自源码,使用./configure –enable-msdblib –with-tdsver = 8.0)和pyodbc 3.0.3(源自内置).

使用类似的组合(unixODBC 2.3.0,FreeTDS 0.91,pyodbc 3.0.3),相同的代码适用于Mac OS X 10.7.2.

我已经搜索高低,调查了herehere解决方案,并重新编译了unixODBC和FreeTDS的不同版本,但仍然没有骰子.相关配置文件如下:

user@host:~$cat /usr/local/etc/freetds.conf
#$Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $
#
# This file is installed by FreeTDS if no file by the same 
# name is found in the installation directory.  
#
# For information about the layout of this file and its settings,# see the freetds.conf manpage "man freetds.conf".  

# Global settings are overridden by those in a database
# server specific section
[global]
        # TDS protocol version
        tds version = 8.0
        client charset = UTF-8

        # 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 
        text size = 64512

# A typical Sybase server
[egServer50]
        host = symachine.domain.com
        port = 5000
        tds version = 5.0

# A typical Microsoft server
[egServer70]
        host = ntmachine.domain.com
        port = 1433
        tds version = 8.0

[foo]
        host = foo.bar.com
        port = 1433
        tds version = 8.0

user@host:~$cat /etc/odbc.ini 
[foo]
Description     = Foo
Driver          = foobar
Trace           = No
Database        = db
Server          = foo.bar.com
Port            = 1433
TDS_Version     = 8.0
user@host:~$cat /etc/odbcinst.ini 
[foobar]
Description     = Description
Driver          = /usr/lib/odbc/libtdsodbc.so
Setup           = /usr/lib/odbc/libtdsS.so
CPTimeout       =
CPReuse         =

任何建议或方向将非常感谢!

解决方法

我遇到与Ubuntu相同的错误.我“解决”了一下工作.
所有您需要做的是设置环境变量TDSVER.
import os
os.environ['TDSVER'] = '8.0'

正如我所说,这不是一个真正的“解决方案”,但它的作品.

猜你在找的MsSQL相关文章