我正在使用Ubuntu 9.04
我已经安装了以下软件包版本:
unixodbc and unixodbc-dev: 2.2.11-16build3
tdsodbc: 0.82-4
libsybdb5: 0.82-4
freetds-common and freetds-dev: 0.82-4
我是这样配置/etc/unixodbc.ini
的:
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/odbc/libtdsodbc.so
Setup = /usr/lib/odbc/libtdsS.so
CPTimeout =
CPReuse =
UsageCount = 2
我是这样配置/etc/freetds/freetds.conf
的:
[global]
tds version = 8.0
client charset = UTF-8
31e2fae4adbf1b2af1726e5668a3414cf46b454f
我已从中获取pyodbc 修订版并使用“ ”http://github.com/mkleehammer/pyodbc
安装它python setup.py install
我的本地网络上有一台装有Microsoft SQL Server 2000的 Windows 机器,启动并监听本地 IP 地址 10.32.42.69。我有一个名为“Common”的空数据库。我有用户“sa”,密码为“secret”,拥有完全权限。
我正在使用以下 python 代码来设置连接:
import pyodbc
odbcstring = "SERVER=10.32.42.69;UID=sa;PWD=secret;DATABASE=Common;DRIVER=FreeTDS"
con = pyodbc.connect(s)
cur = con.cursor()
cur.execute('''
CREATE TABLE testing (
id INTEGER NOT NULL IDENTITY(1,1),
name NVARCHAR(200) NULL,
PRIMARY KEY (id)
)
''')
con.commit()
到目前为止一切正常。我在服务器上使用了 SQLServer 的企业管理器,新表就在那里。现在我想在表上插入一些数据。
cur = con.cursor()
cur.execute('INSERT INTO testing (name) VALUES (?)', (u'something',))
那失败了!!这是我得到的错误:
pyodbc.Error: ('HY004', '[HY004] [FreeTDS][SQL Server]Invalid data type
(0) (SQLBindParameter)'
由于我的客户端配置为使用 UTF-8,我想我可以通过将数据编码为 UTF-8 来解决。那行得通,但后来我得到了奇怪的数据:
cur = con.cursor()
cur.execute('DELETE FROM testing')
cur.execute('INSERT INTO testing (name) VALUES (?)', (u'somé string'.encode('utf-8'),))
con.commit()
# fetching data back
cur = con.cursor()
cur.execute('SELECT name FROM testing')
data = cur.fetchone()
print type(data[0]), data[0]
这没有错误,但返回的数据与发送的数据不同!我得到:
<type 'unicode'> somé string
也就是说,pyodbc 不会直接接受 unicode 对象,但它会将 unicode 对象返回给我!并且编码被混淆了!
现在的问题:
我想要代码在 NVARCHAR 和/或 NTEXT 字段中插入 unicode 数据。当我查询回来时,我想要我插入回来的相同数据。
这可以通过以不同的方式配置系统,或者通过使用能够在插入或检索时正确地将数据转换为/从 unicode 的包装函数
这要求不高,是吗?