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.