PYODBC повреждает данные utf8 (чтение из базы данных MYSQL information_schema) - PullRequest
0 голосов
/ 20 февраля 2011

EDIT: Я полностью переработал этот вопрос, чтобы отразить мое лучшее понимание проблемы

Команда PYODBC + MYSQL, используемая для извлечения всех имен таблиц в моей БД

cursor.execute("select table_name from information_schema.tables where
             table_schema='mydbname'")

Результатом является список строк в кодировке Юникод, в которых в каждой строке пропущен в каждой строке.

DB information_schema - это utf8, хотя мои имена таблиц чистые ascii. Чтение из моей БД, которая является latin1, работает нормально. Выполнение set character_set_* = 'utf8' не помогает.

Выполнение того же запроса из тестовой программы C ++ / ODBC работает нормально.

Знаете ли вы, как pyodbc работает в отношении кодировки символов? Какую кодировку он принимает при работе с БД utf8?

Я работаю в Linux с UnixODBC, python 2.6.4, pyodbc 2.1.7

1 Ответ

2 голосов
/ 04 марта 2011

Спецификация ODBC допускает только два кодирования: ASCII и UCS-2.Задача драйвера ODBC - преобразовать базу данных в одну из этих двух, но я считаю, что большинство авторов драйверов ODBC не понимают, как она должна работать.

Когда выполняется запросpyodbc не запрашивает кодировку.Он выполняет запрос, а затем запрашивает у драйвера тип данных каждого столбца.Если тип данных Unicode, он будет читать буфер и обрабатывать его как UCS2.Если тип данных ASCII, он будет считывать буфер и обрабатывать его как ASCII.

Предполагается, что формат хранения не имеет значения.

...