Преобразование базы данных в UTF-8 лучше в долгосрочной перспективе, но рискованно, потому что вы можете нарушить другие вещи, как вы говорите. Вы можете изменить кодировку базы данных connection на UTF-8. Таким образом, вы получаете строки в кодировке UTF-8 из базы данных, не меняя способ хранения данных.
conn.setdecoding(pyodbc.SQL_CHAR, encoding='utf8')
conn.setdecoding(pyodbc.SQL_WCHAR, encoding='utf8')
Если это кажется слишком рискованным, но вы можете рассмотреть возможность использования двух отдельных соединений с базой данных, оригинал и один в utf8
, и постепенно перенесите приложение на использование utf8
, так как у вас есть время для тестирования.
Если даже это кажется слишком рискованным, возможно, попробуйте использовать более похожую кодировку символов до mysql версии латыни1. MySQL 'latin1' на самом деле является расширенной версией cp1252 кодировки , которая сама является расширением Microsoft для "стандартного latin1", который используется в Python (среди прочих).
conn.setdecoding(pyodbc.SQL_CHAR, encoding='cp1252')
conn.setdecoding(pyodbc.SQL_WCHAR, encoding='cp1252')