我正在使用 pyodbc、带有 freetds 的 ODBC 来访问远程 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
无济于事。
我也看过这里,但答案没有解释为什么给定相同的数据库,两个系统给出两种编码。
我怎样才能让 Ubuntu 也返回 UTF-8?我不精通 MSSQL 或 ODBC。任何帮助是极大的赞赏。