Pymssql, как использовать его для чтения данных Unicode из MSSQL2008

Я использовал pymssql-1.0.2 и freetds-0.82.7 на Ubuntu-10.10. Также у меня есть сервер mssql2008 на windows-7. Я могу подключиться к mssql из ubuntu, используя pymssql и freetds. Но я не могу получить данные юникода из базы данных mssql. Сопоставление базы данных — Cyrillic_General_CI_AS.

Мой файл freetds.conf выглядит так:

[mssql2008]
    host=10.0.0.34
    port=1433
    tds version=7.0

Мой код выглядит так:

   conn = pymssql.connect(host=10.0.0.34\mssql2008, user=***, password=***, database=eoffice, as_dict=true, charset='iso-8859-1')
   crms = conn.cursor()
   crms.execute('SELECT cc_Name FROM tblHR_CodeClass')
   for row in crms.fetchall():
      raise u"Succeeded! Test data: " + row['cc_Name']
      break

Ожидаемый результат: "Өмнөговь аймаг" Фактический результат: "ªìíºãîâü àéìàã"

Когда я использую кодировку «UTF-8», вызов fetchall() выдает ошибку, означающую, что utf8 не может прочитать данные, которые выходят за пределы кодовой страницы.

Как получить данные Unicode, хранящиеся в базе данных mssql? Пожалуйста, дайте руку!

С уважением, Оргил.


person Orgil    schedule 24.02.2011    source источник


Ответы (1)


Это действительно данные Unicode? То есть столбец cc_Name является varchar или nvarchar? Похоже, это varchar — в этом случае попробуйте использовать в качестве кодировки cp1251 или windows-1251 вместо iso-8859-1.

person Dave Huang    schedule 25.02.2011
comment
Спасибо за Ваш ответ. cc_Name — это столбец NVARCHAR. - person Orgil; 27.02.2011
comment
Очень старый ответ, но все еще полезный в 2016 году! Некоторое время это меня ошеломляло, так как моя кодировка не была юникодной, но я не мог получить правильный перевод из моего запроса pymssql. Спасибо. - person Neal Magee; 31.08.2016