gpt4 book ai didi

mysql - 从 utf8_general_ci 转换为 utf8_unicode_ci

转载 作者:可可西里 更新时间:2023-11-01 08:15:22 26 4
gpt4 key购买 nike

我有一个 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)

但这似乎改变了 future 数据的字符集,但并未将实际存在的数据从 utf8_general_ci 转换为 utf8_unicode_ci。有什么方法可以将现有数据转换为 utf8_unicode_ci 吗?

最佳答案

SHOW CREATE TABLE 以查看它是否真的在 上设置了CHARACTER SETCOLLATION,而不是只是默认值。

什么是 CHARACTER SETALTERs 之前

SELECT col, HEX(col) ...应该在其中包含 utf8 的某些字段执行操作。这将帮助我们确定表中是否真的有 utf8。字符的编码根据CHARACTER SET而不同; HEX 有助于发现这一点。

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

要真正了解 utf8_general_ciutf8_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 |
+-------------------------------------+-------------------------------------+

但是,要在您的表中进行测试,您需要存储这些值并使用 WHEREGROUP_CONCAT 或其他东西来确定相等性。

ALTERs 未能实现排序规则更改,您有什么“证据”?

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

关于mysql - 从 utf8_general_ci 转换为 utf8_unicode_ci,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30274606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com