【问题标题】:Converting utf8_general_ci tables and fields to utf8_unicode_ci将 utf8_general_ci 表和字段转换为 utf8_unicode_ci
【发布时间】:2011-04-27 10:28:57
【问题描述】:

几年前我在设计我的应用程序数据库时犯了一个错误,我的表和表字段的排序规则设置是混合的。其中有些是 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 查询是否会破坏任何字段值,尤其是那些包含重音字符的字段值?或者运行这两个查询是否安全?

期待您的来信。

感谢您的回答!

【问题讨论】:

    标签: mysql character-encoding collation


    【解决方案1】:

    排序规则只影响字段中字符串的比较方式,而不影响它们的存储方式。只要您继续使用 utf8 编码,您就是安全的。

    【讨论】:

    【解决方案2】:

    请参考 mysql 文档,其中讨论了更改字符集和排序规则

    http://dev.mysql.com/doc/refman/5.1/en/charset-column.html

    它的意思是-“如果您使用 ALTER TABLE 将列从一个字符集转换为另一个,MySQL 会尝试映射数据值,但如果字符集不兼容,则可能会丢失数据。”

    --干杯

    【讨论】:

    • 不过,这两种字符编码是兼容的。事实上,它是完全相同的字符编码,只是排序时比较它们的方式不同。列上的任何索引都可能需要重建,仅此而已。
    猜你喜欢
    • 2015-07-28
    • 2015-11-10
    • 2010-11-05
    相关资源
    最近更新 更多