更改MySQL数据库的字符集和排序规则时,现有索引会受到影响

问题描述 投票:1回答:1
  1. 我们有一个数据库,其中表和列的默认字符集设置为utf8编码
  2. 但是使用utf8的字符集编码,我们无法保存表情符号
  3. 为了支持保存表情符号,a)我们必须将表和列的字符集更改为utf8mb4b)我们不得不将表和列的排序规则更改为utf8mb4_unicode_cic)更新我们的JDBC驱动程序,使其支持unicode编码

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

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

mysql database character-encoding collation character-set
1个回答
0
投票
索引是指向表行的指针的有序列表。排序基于索引列的CHARACTER SETCOLLATION。如果更改其中任何一个,则必须重建索引。 “指针”(在此上下文中)是PRIMARY KEY的副本。

您应该做以下一项或多项

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

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

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

其中第一个“ ...”是列定义的其余部分(VARCHAR,NOT NULL,无论如何)。

任何涉及要更改的列的索引都将重建。特别是,请注意,VARCHAR PRIMARY KEY在每个二级索引中均有效。

排序规则utf8mb4_unicode_ci很旧;您可能更喜欢utf8mb4_unicode_520_ci,尤其是因为它将表情符号视为与众不同而不是集中在一起(IIRC)。

utf8是utf8mb4的子集的事实并不重要; MySQL将其视为更改,因此无法采取任何捷径。

© www.soinside.com 2019 - 2024. All rights reserved.