数据库从 latin1 到 utf8mb4 的转换,索引呢?

Posted

技术标签:

【中文标题】数据库从 latin1 到 utf8mb4 的转换,索引呢?【英文标题】:Database conversion from latin1 to utf8mb4, what about indexes? 【发布时间】:2021-12-05 15:41:10 【问题描述】:

我注意到我的 MODX 数据库在数据库及其表中仍然使用 latin1 字符集。我想将它们转换为 utf8mb4 并相应地更新排序规则。

不完全确定我应该怎么做。这是正确的吗?

我将每个表都更改为使用 utf8mb4 和 utf8_unicode_ci? 我更新了数据库的默认字符集和排序规则。

索引会自动更新吗?还有什么我应该注意的吗?

一个额外的问题:最合适的最新 utf8_unicode 排序规则是什么?西方语言应该可以。

【问题讨论】:

【参考方案1】:

更改表或架构的默认字符集不会更改列本身的数据,它只会更改默认值以在您下次添加表或向表中添加列时应用。

要转换当前数据,一次更改一个表:

ALTER TABLE <name> CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

utf8mb4_0900_ai_ci 排序规则比以前的排序规则更快(至少根据documentation),它是最新和最准确的。此排序规则需要 mysql 8.0。

MySQL 5.7 中最新的排序规则是 utf8_unicode_520_ci。

这样的表转换会重建索引,因此您无需执行任何其他操作。

【讨论】:

5.7 也有 utf8mb4_unicode_520_ci 。 这提供了一种构建所有所需更改的方法:mysql.rjweb.org/doc.php/limits#767_limit_in_innodb_indexes

以上是关于数据库从 latin1 到 utf8mb4 的转换,索引呢?的主要内容,如果未能解决你的问题,请参考以下文章

mysql 设置 utf8mb4 怎么查询

mysql 5.7怎么设置成utf8mb4

如何mysql 5.7的编码设置成utf8mb4

如何在mysql中存取utf8mb4编码的字符

如何mysql 5.7的编码设置成utf8mb4

mysql6.0 utf8mb4怎么改为utf8