MySQL UTF8转换 - 为什么要转储数据库?

时间:2011-07-22 15:27:34

标签: mysql utf-8

我需要将我的MySQL数据库从latin1_sweedish_ci转换为utf8,看起来utf8_bin是我理想的选择。我一直在读,有些人已经导出了他们的数据库并重新创建了它们。这真的有必要吗?我不能只运行查询来转换数据吗?

我在安装MySQL 5时读到了一个人,在MySQL编译期间指定了UTF-8 ...

3 个答案:

答案 0 :(得分:1)

您必须导出数据库并进行转换。设置数据库,表格和行编码会改变将来在上操作的方式,但不会转换已存储的数据。

没有数据库编码交换免费午餐。

在MySQL 5中,您必须重置db,tables和columns的所有字符编码,然后重新导入数据。 wordpress guide to changing char sets是执行此操作的良好分步资源。

我建议阅读Wordpress操作方法,因为步骤得到了很好的解释和清晰,但重点是:

设置DB char set:

ALTER DATABASE db_name CHARACTER SET utf8 COLLATE utf8_unicode_ci;

然后设置现有的表格编码:

ALTER TABLE db_table CHARACTER SET utf8 COLLATE utf8_unicode_ci;

然后转储w / one编码,用另一个

重新导入
mysqldump --user=username --password=password --default-character-set=latin1_swedish_ci dbname > dump.sql

mysql --user=username --password=password --default-character-set=utf8 dbname < dump.sql

请注意,如果您不想转储&amp;重新加载整个数据库,您可以逐列执行更改,方法是将每个文本列转换为等效的blob类型,然后将其转换回具有所需编码的文本列,如Wordpress指南{{3}中所述}。

答案 1 :(得分:0)

没有必要转储&amp;重装。您可以让MySQL对值进行转码,但您必须为包含文本数据的每一列发出ALTER 。非常讨厌,你必须编写一个脚本来生成它!之后,您仍需要更改所有默认值。

ALTER TABLE `foo` CHANGE `mycolumn` `mycolumn` 
TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL

答案 2 :(得分:0)

ALTER TABLE `foo` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

为我完成所有转换,包括列,我需要做的就是为数据库中的每个表写这个。