我有一个需要支持表情符号的 mysql 列,这意味着将 utf8 列转换为 utf8mb4。但是我的 varchar(255) 不适合,只要该列被索引(不是唯一的)。
如何保留索引并获取 utf8mb4 排序规则?
我试图将长度减少到 191,但不幸的是我的一些行更长,我收到了这个错误:(#1406 - Data too long for column 'column_name' at row 33565
这不是很有帮助,因为我没有自动增量列并且不知道如何罚款第 33565 行)。
我认为它与行的最大数据长度有关,有这样的限制,至少对于我所知道的字符串数据类型。为避免这种情况,请尝试分离表的数据,例如使用一对一关系将表拆分为两个表。
关于最大键长:我尝试创建带有索引utf8mb4
字段的表,它成功创建了键长191,但是当我将它设置为192时,它抛出了一个错误- 指定的键太长;最大密钥长度为 767 字节。
我最终删除了索引。
如果性能受到负面影响,我可能会添加第二个索引列,该列仅包含当前列的第一个n
字符(最多 191 个,但可能只有 10-20 个左右)。
191 个字符的限制是由于最大密钥长度为 767 个字节。对于 4 字节字符,这意味着最多 191 个字符 ( floor(767/4) = 191
)。