MySQL UTF8转换-为什么转储数据库?
我需要将我的MySQL数据库从MySQL UTF8转换-为什么转储数据库?,mysql,utf-8,Mysql,Utf 8,我需要将我的MySQL数据库从latin1\u sweedish\u ci转换为utf8,看起来utf8\u bin是我的理想选择。我一直在读到一些人已经导出了他们的数据库并重新创建了它们。这真的有必要吗?我不能运行查询来转换数据吗 我看到一个人在安装MySQL 5时,在MySQL编译期间指定了UTF-8。您必须导出数据库并转换它们。设置数据库、表和行编码会更改它们在将来的操作方式,但不会转换已存储的数据 没有免费的数据库编码交换午餐 在MySQL 5中,必须重置数据库、表和列的所有字符编码,然
latin1\u sweedish\u ci
转换为utf8
,看起来utf8\u bin
是我的理想选择。我一直在读到一些人已经导出了他们的数据库并重新创建了它们。这真的有必要吗?我不能运行查询来转换数据吗
我看到一个人在安装MySQL 5时,在MySQL编译期间指定了
UTF-8
。您必须导出数据库并转换它们。设置数据库、表和行编码会更改它们在将来的操作方式,但不会转换已存储的数据
没有免费的数据库编码交换午餐
在MySQL 5中,必须重置数据库、表和列的所有字符编码,然后重新导入数据。这是一个很好的逐步实现的资源
我建议阅读Wordpress操作指南,因为这些步骤解释得很清楚,但重点是:
Set 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;
然后使用一种编码转储,使用另一种编码重新导入
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
mysqldump--user=username--password=password--default character set=latin1\u-swedish\u-ci-dbname>dump.sql
mysql--user=username--password=password--default character set=utf8 dbname
请注意,如果您不想转储和重新加载整个数据库,您可以通过将每个文本列转换为等效的blob类型,然后将其转换回具有Wordpress指南中所述的所需编码的文本列来逐列执行更改。无需转储和重新加载。您可以让MySQL对值进行转码,但必须为包含文本数据的每一列发出ALTER。很烦人,你必须写一个脚本来生成它!之后,您仍然需要更改所有默认值
ALTER TABLE `foo` CHANGE `mycolumn` `mycolumn`
TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL
为我做所有的转换,包括列,但我需要做的是为数据库中的每个表编写这个。为什么不
ci
,但是bin
?据我所知,A=Ä
如果我在MySQL比较中不使用utf8_-bin
,将返回true。A!=是的,所以我不想让它变成真的。当然,你可以用。@Kerrek SB:这不是他说的needs@Webnetutf8_general_ci中的A=Ä
,但A!=这里不需要utf8中的
unicode\u ciiconv
。我甚至会说在这种情况下是邪恶的。您已经提供了一个指向WP指南的链接,它根本不使用iconv
;-)然后转换数据
——不,数据应该保持原样。@zerkms,谢谢你的真实性检查。我从以前MySQLs的旧脚本中提取了iconv。用mysqldump
steps更新了答案。这样更好,+1;-)@Shelhamer在ALTER TABLE语句之前转储数据库不是更好吗?@Andreas Krueger,对不起,这是我手指的答案,不是我的大脑。这两个ALTER
语句都应该设置在未来操作中与db一起使用的编码,但不更改已存储的数据。正确的步骤是1)改变。。字符集2)转储3)导入w/新字符设置因此,即使在运行该查询之后,我也必须让脚本遍历并对所有数据进行编码?是否可以在MySQL中对数据进行编码?
ALTER TABLE `foo` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;