在mysql服务器上从latin1更改为utf8

时间:2013-12-02 13:00:14

标签: mysql utf-8 character-encoding mysqldump latin1

我们最近在从数据库收集数据时使用'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

这解决了应用程序崩溃的问题,但所有旧数据都已损坏。

1 个答案:

答案 0 :(得分:0)

您可以使用单个查询转换表的排序规则,如:

ALTER TABLE <yourtable> CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;