更改 MySQL 数据库的character_set和排序规则时,现有索引是否受到影响


  1. 我们有一个数据库,其中表和列的默认字符集设置为utf8编码
  2. 但是使用utf8的字符集编码,我们无法保存表情符号
  3. 为了支持表情符号的保存, a( 我们必须将表和列的字符集更改为utf8mb4b( 我们必须将表和列的排序规则更改为 utf8mb4_unicode_ci c( 更新我们的 JDBC 驱动程序,使其支持 Unicode 编码

通过上述更改,我们可以将表情符号保存在我们的列中。

问题:1(我是否需要删除现有索引(varchar 列(并像以前一样使用 utf8 重新创建索引,每个字符过去占用 3 个字节,现在使用 utf8mb4 编码将占用 4 个字节?

索引是指向表行的指针的有序列表。 排序基于索引列的CHARACTER SETCOLLATION。 如果更改任一,则必须重新生成索引。 "指针"(在此上下文中(是PRIMARY KEY的副本。

您应该执行以下一项或另一项操作

ALTER TABLE tbl CONVERT TO CHARACTER SET utf8mb4 COLLATE ...,;

这将转换表中的所有文本列。 或者,如果您需要保留一些当前字符集/排序规则,请更改每列:

ALTER TABLE tbl MODIFY col_name ... CHARACTER SET utf8mb4 COLLATE ...;

其中第一个"..."是列定义的其余部分(VARCHAR,而不是 NULL,等等(。

将重新生成涉及正在更改的列的任何索引。 特别要注意的是,VARCHARPRIMARY KEY实际上位于每个二级索引中。

排序规则utf8mb4_unicode_ci相当古老; 您可能更喜欢utf8mb4_unicode_520_ci,特别是因为它将表情符号处理为不同的而不是混为一谈(IIRC(。

utf8 是 utf8mb4 的子集这一事实无关紧要;MySQL将其视为一种变化,并且没有采取任何捷径。

相关内容

  • 没有找到相关文章

最新更新