3

我正在使用 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。任何帮助是极大的赞赏。

4

0 回答 0