我们最近在从数据库收集数据时使用'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 and UnicodeDecodeError
这解决了应用程序崩溃的问题,但所有旧数据都已损坏。
答案 0 :(得分:0)
您可以使用单个查询转换表的排序规则,如:
ALTER TABLE <yourtable> CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;