从utf8_general_ci转换为utf8_unicode_ci

时间:2015-05-16 10:38:20

标签: mysql character-encoding

我有一个utf8_general_ci数据库,我有兴趣转换为utf8_unicode_ci。 我已经尝试了以下命令

    ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; (for every single table)

但这似乎改变了未来数据的字符集,但没有将实际的现有数据从utf8_general_ci转换为utf8_unicode_ci。 有没有办法将现有数据转换为utf8_unicode_ci?

2 个答案:

答案 0 :(得分:2)

SHOW CREATE TABLE看看它是否确实在上设置了CHARACTER SETCOLLATION,而不仅仅是默认设置。

<{1}} 之前CHARACTER SET 是什么?

对于某些 其中包含utf8的字段,请ALTERs。这将有助于我们确定您是否真的在表中有utf8。字符的编码根据SELECT col, HEX(col) ...而有所不同; CHARACTER SET有助于发现这种情况。

排序HEXWHERE等)由ORDER BY控制。索引可能必须根据您的COLLATION重建。带索引的大表是否需要很长时间才能转换?

要真正看到ALTER TABLEutf8_general_ci之间的区别,您需要“结合重音”,或者更简单地说,需要德语utf8_unicode_ciß

ss

但是,要在表中测试,您需要存储这些值并使用mysql> SELECT 'ß' = 'ss' COLLATE utf8_general_ci, 'ß' = 'ss' COLLATE utf8_unicode_ci; +-------------------------------------+-------------------------------------+ | 'ß' = 'ss' COLLATE utf8_general_ci | 'ß' = 'ss' COLLATE utf8_unicode_ci | +-------------------------------------+-------------------------------------+ | 0 | 1 | +-------------------------------------+-------------------------------------+ WHERE或其他内容来确定相等。

GROUP_CONCAT未能实现校对更改的“证明”是什么?

(解决其他评论:ALTERs应无关紧要。REPAIR告诉CONVERT TO实际修改数据,因此它应该已完成所需的操作。)

答案 1 :(得分:1)

您必须更改每个表中每个字段的排序规则。正如您所说,表的排序规则只是稍后创建的字段的默认值,而数据库的排序规则只是稍后创建的表的默认值。