2013-11-21 28 views
2

我有一个需要支持表情符号的mysql列,这意味着将一个utf8列转换为utf8mb4。但是我的varchar(255)不适合,只要列索引(不唯一)。如何将一个索引的varchar(255)从utf8更改为utf8mb4,并仍然保持在767最大密钥长度以下?

如何保持索引,并获得utf8mb4整理?

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

回答

5

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

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

3

我最终删除了索引。

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

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

相关问题