我需要将我的MySQL数据库从latin1_sweedish_ci
转换为utf8
,看起来utf8_bin
是我理想的选择。我一直在读,有些人已经导出了他们的数据库并重新创建了它们。这真的有必要吗?我不能只运行查询来转换数据吗?
我在安装MySQL 5时读到了一个人,在MySQL编译期间指定了UTF-8
...
答案 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;
为我完成所有转换,包括列,我需要做的就是为数据库中的每个表写这个。