我正在使用pyodbc,ODBC和freetds来访问远程MSSQL数据库。我最近从Centos + Python 2.4迁移到Ubuntu + Python 2.7,两者表现不同。我的freetds.conf是:
[global]
# TDS protocol version
tds version = 4.2
# 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
[server]
host = server
port = 1333
tds version = 8.0
client charset = UTF-8
我的Python代码是(简化的):
import pyodbc
msConn = pyodbc.connect('DSN=%s;UID=%s;PWD=%s' % (self.dsn, self.user, self.passwd))
msCur = msConn.cursor()
msQuery='''select ...'''
msCur.execute(msQuery % startUpdateStamp)
for row in msRows:
print rows
当我在Centos服务器上执行上面的代码(使用python 2.4)时,任何特殊字符都以utf-8编码。但是,当在Ubuntu服务器(python 2.7)上执行相同配置的相同代码时,特殊字符为unicode。就像配置client charset = UTF-8
被完全忽略一样。
但是我尝试将client charset
设置为其他值,作为回报,服务器不允许连接。这意味着客户端字符集设置正在通过。我也试过改变tds version = 8.0
无济于事。
我也看了here,但答案并没有解释为什么给定相同的数据库,两个系统给出两个编码。
我怎样才能让Ubuntu返回UTF-8? 我不熟悉MSSQL或ODBC。非常感谢任何帮助。