gpt4 book ai didi

mysql - 如何在mysql中解析 "specified key was too long max key length is 255 bytes"?

转载 作者:可可西里 更新时间:2023-11-01 06:37:06 25 4
gpt4 key购买 nike

每当我从一个 mysql 客户端 (emma) 触发此查询时:

CREATE TABLE `tbl_mappings` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`private_id` int(11) unsigned NOT NULL,
`name` tinytext NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`private_id`,`name`(255)),
KEY `FK_tbl__private_integrations_mappings_tbl__private_integrations` (`private_id`),
CONSTRAINT `FK_tbl__private_integrations_mappings_tbl__private_integrations` FOREIGN KEY (`private_id`) REFERENCES `tbl__private_integrations` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我收到错误:指定的 key 太长,最大 key 长度为 255 字节

我正在使用 mysql server 5.7,ubuntu 16.04

我尝试在 [mysqld] 下的 my.cnf 中添加配置:

innodb_file_format=barracuda
innodb_file_per_table=1
innodb_large_prefix=1
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-storage-engine=InnoDB

然后重启mysql服务,还是不行。

感谢任何帮助。谢谢。

最佳答案

编辑

问题似乎与 TINYTEXT 数据类型有关。 (我可以使用 InnoDB 或 MyISAM 使用 MySQL 版本 5.7.17-0ubuntu0.16.04.1-log 复制观察到的行为。)

简短的回答(作为解决方法,如何解决 1071 警告)是使用数据类型 VARCHAR(255) 代替 TINYTEXT


我使用各种字符集(utf8、utf8mb4、latin1)并使用 InnoDB 和 MyISAM 存储引擎运行了多个测试用例。 1071 警告似乎与 TINYTEXT 列的索引中指定的前缀长度有关...似乎是 MySQL 对前缀长度的限制(与 InnoDB 无关,因为我可以使用 MyISAM 复制该行为。)我没有使用 TINYTEXT 以外的任何其他 TEXT 类型进行测试。


上一个答案

<罢工>

<罢工>

InnoDB 表的索引键长度限制为 767 字节。

键定义中的 name(255) 指定 name 的前 255 个字符。使用 MySQL utf8 字符集,一个字符可以占用一到三个字节。 255 乘以 3 是 765。加上 int private_id 的四个字节,就是 769,超出了最大值。

这就是您收到错误的原因。

解决该问题的几种方法。

最简单的方法是减少索引中包含的名称的字符数,例如

UNIQUE KEY `name` (`private_id`,`name`(254))

如果这不能满足您的用例,那么您可能需要考虑使用已弃用的 innodb_large_prefix 设置。您需要使用 DYNAMICCOMPRESSED 行格式。请参阅此处的讨论:

<罢工>

https://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html

https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format-specification.html

关于mysql - 如何在mysql中解析 "specified key was too long max key length is 255 bytes"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46156953/

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