gpt4 book ai didi

MySQL 错误 1071 (42000) : Specified key was too long; max key length is 3072 bytes

转载 作者:行者123 更新时间:2023-11-29 07:28:13 25 4
gpt4 key购买 nike

当我尝试创建一个表时:

CREATE TABLE `oro_workflow_restriction` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`workflow_step_id` int(11) DEFAULT NULL,
`workflow_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`attribute` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`field` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`entity_class` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`mode` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`mode_values` longtext COLLATE utf8mb4_unicode_ci COMMENT '(DC2Type:json_array)',
PRIMARY KEY (`id`),
UNIQUE KEY `oro_workflow_restriction_idx` (`workflow_name`,`workflow_step_id`,`field`,`entity_class`,`mode`),
KEY `IDX_3D2C17E271FE882C` (`workflow_step_id`),
KEY `IDX_3D2C17E21BBC6E3D` (`workflow_name`),
CONSTRAINT `FK_3D2C17E21BBC6E3D` FOREIGN KEY (`workflow_name`) REFERENCES `oro_workflow_definition` (`name`) ON DELETE CASCADE,
CONSTRAINT `FK_3D2C17E271FE882C` FOREIGN KEY (`workflow_step_id`) REFERENCES `oro_workflow_step` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

我收到有关指定 key 太长的错误;最大 key 长度为 3072 字节。

我不明白为什么会出现错误。最长 key 长度为唯一 key :4 + 4 * 255*3 = 3071 字节 < 3072 字节。 (如果我的计算正确的话)

显然 utf8mb4 是每个字符 4 个字节,我最多只能有 varchar(191)。在我的例子中是 4 + 4 * 255*4 = 4084 字节 > 3072 字节。

有没有一种不需要更改数据类型就可以正常工作的方法?

最佳答案

两种解决方案

通过删除唯一约束

如果可以去掉唯一性约束。为搜索目的启用全文索引,但您将无法实现唯一约束。

通过规范化架构

varchar(255) 列从该表中取出并存储引用表中的 ids。这些将是整数。对于整数,复合键也能正常工作。

我认为 MySQL 在将其限制为 3072 字节方面做得很好。否则,人们会创建各种无用的索引,从而导致性能瓶颈。

关于MySQL 错误 1071 (42000) : Specified key was too long; max key length is 3072 bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52840560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com