4

我有一个需要支持表情符号的 mysql 列,这意味着将 utf8 列转换为 utf8mb4。但是我的 varchar(255) 不适合,只要该列被索引(不是唯一的)。

如何保留索引并获取 utf8mb4 排序规则?

我试图将长度减少到 191,但不幸的是我的一些行更长,我收到了这个错误:(#1406 - Data too long for column 'column_name' at row 33565这不是很有帮助,因为我没有自动增量列并且不知道如何罚款第 33565 行)。

4

2 回答 2

7

我认为它与行的最大数据长度有关,有这样的限制,至少对于我所知道的字符串数据类型。为避免这种情况,请尝试分离表的数据,例如使用一对一关系将表拆分为两个表。

关于最大键长:我尝试创建带有索引utf8mb4字段的表,它成功创建了键长191,但是当我将它设置为192时,它抛出了一个错误- 指定的键太长;最大密钥长度为 767 字节

于 2013-11-22T07:25:13.513 回答
4

我最终删除了索引。

如果性能受到负面影响,我可能会添加第二个索引列,该列仅包含当前列的第一个n字符(最多 191 个,但可能只有 10-20 个左右)。

191 个字符的限制是由于最大密钥长度为 767 个字节。对于 4 字节字符,这意味着最多 191 个字符 ( floor(767/4) = 191)。

于 2013-11-22T15:30:49.500 回答