Хотя 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. Любая помощь с благодарностью.