1071 - 指定的密钥太长;最大密钥长度为 1000 字节 [重复]

Posted

技术标签:

【中文标题】1071 - 指定的密钥太长;最大密钥长度为 1000 字节 [重复]【英文标题】:1071 - Specified key was too long; max key length is 1000 bytes [duplicate] 【发布时间】:2017-02-27 19:48:33 【问题描述】:

导入我拥有的 Sqlbackup 时出现以下错误:

SQL-Befehl:

CREATE TABLE jos_hikashop_zone_link (
    zone_parent_namekey VARCHAR(255) NOT NULL,
    zone_child_namekey VARCHAR(255) NOT NULL,
    PRIMARY KEY (zone_parent_namekey, zone_child_namekey)
)
ENGINE = MYISAM
AVG_ROW_LENGTH = 49
CHARACTER SET utf8
COLLATE utf8_general_ci
mysql meldet: Dokumentation

1071 - 指定的密钥太长;最大密钥长度为 1000 字节

我尝试过 在我导入文件之前“设置 GLOBAL storage_engine='InnoDb'”。

我无法获得新的 SQLImportfile。

我在本地机器上使用 XAMPP。

【问题讨论】:

您指定了一个由 510 个字符组成的复合键,但每个 UTF-8 字符可能长达 4 个字节,因此您请求的键大小超过 2K,这是 MySQL 不喜欢的。缩小复合键的大小以便继续。 我该怎么做? 【参考方案1】:

因为您的主键是两个 UTF8 VARCHAR(255) 列上的多列主键,所以索引大小是两列的大小相加。

UTF8 列上的索引会自动分配所有可能的空间,其中每个字符最多可占用 3 个字节。因此,您的索引大小为 255 个字符 * 3 个字节 * 2 列 = 1530 个字节。

MyISAM 的索引限制为 1000 字节。 InnoDB 的限制更小(767 字节),除非您使用的是 MySQL 5.7.7+,在这种情况下,默认限制为 3072 字节。

尝试减小索引大小。通常,索引大小越小,查找性能就越好。

【讨论】:

以上是关于1071 - 指定的密钥太长;最大密钥长度为 1000 字节 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥会出现此错误 #1071 - 指定的密钥太长;最大密钥长度为 1000 字节? [复制]

#1071 - 指定的密钥太长;最大密钥长度为 767 字节

语法错误或访问冲突:1071 指定的密钥太长;最大密钥长度为 767 字节 [重复]

错误:#1071 - 指定的密钥太长;最大密钥长度为 1000 字节 - mysql 5.0.91

1071 - 指定的密钥太长;最大密钥长度为 1000 字节 [重复]

SQLSTATE[42000]:语法错误或访问冲突:1071 指定的键太长;最大密钥长度为 767 字节