将utf8_general_ci表和字段转换为utf8_unicode_ci

8

几年前设计我的应用程序数据库时犯了一个错误,我的表和表字段的排序设置混合在一起。其中一些是utf8_general_ci,另一些是utf8_unicode_ci。

这会在连接具有不同排序的表时出现问题。现在,我计划更改排序设置并使它们相同:utf8_unicode_ci。我将在所有表上运行这两个SQL查询。

ALTER TABLE  `table1` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE  `table1` CHANGE  `Action`  `Action` VARCHAR( 250 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;

我的问题是,运行这两个SQL查询是否会破坏任何字段值,特别是那些包含重音字符的值?或者运行这两个查询是安全的吗?
期待您的回复。
谢谢您的答案!
2个回答

6

排序规则(collation)只会影响字段内字符串的比较,而不会影响它们的存储方式。只要您继续使用utf8编码,就可以放心使用。


1
是的,这是正确的。有一些微妙的排序和比较差异,比如德语的 ß = ss 和其他字符,但不会改变任何数据。有关详细信息,请参阅 http://dev.mysql.com/doc/refman/5.1/en/charset-unicode-sets.html。 - Pekka
1
大家好,请查看下面Koteswasa提到的链接(http://dev.mysql.com/doc/refman/5.1/en/charset-column.html)。感谢您的时间。 - TamTam
我改正了。在相同的编码范围内,切换排序规则是安全的。 - Mchl

5
请参考MySQL文档,其中讲述了如何更改字符集和排序规则。链接如下:http://dev.mysql.com/doc/refman/5.1/en/charset-column.html
文档中提到:“如果您使用ALTER TABLE将列从一个字符集转换为另一个字符集,则MySQL尝试映射数据值,但如果字符集不兼容,则可能会有数据丢失。”
--祝好

1
这两种字符编码是兼容的。实际上,它们是完全相同的字符编码,只是在排序时比较的方式不同。任何列上的索引可能需要重新构建,就这些。 - thomasrutter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接