Хотя freetds.conf установлен на кодировку UTF-8, pyodbc fetchall возвращается в юникоде?

Я использую 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) специальные символы находятся в юникоде. Это как если бы конфигурация client charset = UTF-8 полностью игнорируется.

Однако я попытался установить client charset другие значения, в свою очередь, сервер не разрешает соединение. Это означает, что настройка клиентской кодировки проходит. Я также пытался изменить tds version = 8.0 но безрезультатно.

Я также посмотрел здесь, но ответ не объясняет, почему при одной и той же базе данных две системы дают две кодировки.

Как я могу сделать так, чтобы Ubuntu возвращал UTF-8? Я не опытный в MSSQL или ODBC. Любая помощь с благодарностью.

0 ответов

Другие вопросы по тегам