Я пытаюсь использовать pyodbc для вставки списка списков в таблицу Teradata с целевым столбцом, определенным как varchar Unicode.
Любая буква, выходящая за пределы стандартной кодовой точки ascii 127, выглядит как два символа,Например, ü входит в таблицу как ü.
Символы UTF-8 также встречаются неправильно.
'отображается как â и два непечатаемых символа после него (PAD и SGCI согласно notepad ++)
Если я изменяюпри setencoding в скрипте python для latin1 он вставляет латинские символы правильно, но, конечно, когда он получает не латинский символ (в моем случае \ u2019), он выходит с порядковым номером, не находящимся в диапазоне ошибок.
Символы под кодом 127 встречаются нормально.Когда я печатаю строку в консоли после установки PYTHONIOENCODING = UTF-8 и непосредственно перед вставкой, строка выглядит так, как должна, я вижу значок ü.И '
РЕДАКТИРОВАТЬ 2:
Оказывается, это может вообще не иметь никакого отношения к pyodbc
print(item)
print(item.encode('utf-8'))
Выход:
Classificação
b'Classifica \ xc3 \ xa7 \ xc3 \ xa3o '
И эти кодовые точки соответствуют тому, что я вижу в базе данных:
çà £
Переменная item типа str.
Разве байтовая строка не должна быть e7 и e3?другими словами:
b'Classifica \ xe7 \ xe3o '
РЕДАКТИРОВАТЬ:
Пример, неверный текст и соответствующий гекс (в соответствии сФункция char2hexint от Teradata)
açà £ o, 006100C300A700C300A3006F
Я ожидаю: ação, 006100E700E3006F
В соответствии с документацией pyodbc: https://github.com/mkleehammer/pyodbc/wiki/Unicode У меня есть настройкамое соединение выглядит следующим образом:
cnxn.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
cnxn.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
cnxn.setdecoding(pyodbc.SQL_WMETADATA, encoding='utf-8')
cnxn.setencoding(encoding='utf-8')
Программное обеспечение
Red Hat Enterprise Linux Server release 7.3 (Maipo)
Teradata Drivers 15.10.01.14
Teradata Database version 15.10.X
Python version: Anaconda - Python 3.6.3
Pyodbc version: pyodbc-4.0.17
Это запись DSN:
[server]
Driver=<validpath>/ODBC_64/lib/tdata.so
Description=Teradata ODBC
CharacterSet=UTF8
DBCName=server
EnableDataEncryption=Yes
EnableLOBs=Yes
EnableReconnect=No
IntegratedSecurity=No
LoginTimeout=20
MapCallEscapeToExec=No
MaxRespSize=1048576
PortNumber=1025
PrintOption=N
ProcedureWithSplSource=Y
ReportCodePageConversionErrors=0
ShowSelectableTables=Yes
Trace=Yes
TraceFile=/tmp/trace.log