pyodbc удалить строки в юникоде

Я использую pyodbc для подключения к sqlserver и ниже моя строка подключения.. Все правильно, но результаты возвращаются в виде строки Unicode. У меня есть CHARSET=UTF8 в строке подключения, но он все еще возвращается в виде строки Unicode?

Есть ли способ, которым я могу ограничить его с помощью самого параметра подключения?

Я не хочу вызывать дополнительную функцию для преобразования моего юникода в обычные строки.

import pyodbc as p

connstr= 'DRIVER={SQL Server};SERVER=USERNAME\SQLEXPRESS;DATABASE=TEST;Trusted_Connection=yes;unicode_results=True;CHARSET=UTF8'
conn = p.connect(connstr)
print conn
cursor = conn.cursor()
result = cursor.execute("select * from employee1")
for each in result:
    print each

1 ответ

Решение

Вы не можете решить эту проблему в строке подключения. SQL Server не имеет свойства CHARSET в настройках соединения odbc, так что это вам не поможет.

Общая проблема, с которой вы столкнулись, заключается в том, что данные в базе данных являются Юникодом. Тип данных для этого столбца - nvarchar, это расширенный (UTF-16... может быть UC-2 в Windows, не помню) тип данных, включающий в себя международные символы данных.

Вы можете преобразовать данные с помощью приведения в запросе выбора, например:

SELECT CAST(fieldname AS VARCHAR) AS fieldname

или преобразовать его в python, например:

# to utf-8
row.fieldname.encode('utf8')

# to ascii, ignore non-utf-8 characters
row.fieldname.encode('ascii', 'ignore')

# to ascii, replace non-utf-8 characters with ?
row.fieldname.encode('ascii', 'replace')

Если вам не нужны интернациональные символы, вы можете хранить данные в varchar вместо nvarchar.

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