Недавно мы начали получать 'utf8' codec can't decode bytes in position 30-31: unexpected end of data
при сборе данных из базы данных (используя Python и SQLAlchemy). Мы обнаружили ошибку в некоторых специальных японских символах.
Все таблицы имеют CHARSET=utf8
, и это настройки, которые у нас есть на сервере, когда я запускаю show variables;
| character_set_client | latin1
| character_set_connection | latin1
| character_set_database | latin1
| character_set_filesystem | binary
| character_set_results | latin1
| character_set_server | latin1
| character_set_system | utf8
| character_sets_dir | /usr/share/mysql/charsets/
| collation_connection | latin1_swedish_ci
| collation_database | latin1_swedish_ci
| collation_server | latin1_swedish_ci
Если мы не хотим переводить нашу среду на utf8 — какие настройки рекомендуются и как мы должны экспортировать и импортировать текущие данные, которые у нас есть, чтобы заставить их работать с новыми настройками?
Я прочитал несколько сообщений об экспорте данных как latin1
путем добавления --default-character-set=latin1
в команду mysqldump, а затем импорта их в базу данных с новыми настройками, но, поскольку наши исходные таблицы уже находятся в utf8, это не сработает.
Попытался установить соединение после прочтения этой темы: SQLAlchemy и UnicodeDecodeError
Это решает проблему сбоя приложения, но все старые данные повреждаются.
SET NAMES
. а ты сделай бэкап и попробуй просто сконвертировать? - person Daniel W.   schedule 02.12.2013