我使用以下SQL命令创建一个表,但它给了我以下错误。
#1071 - Specified key was too long; max key length is 1000 bytes
我检查了SQL文档,它说“消息:指定的密钥太长;最大密钥长度是%d字节”,这没有太大帮助。
CREATE TABLE Consist_of
(
dssn INTEGER,
pre_no VARCHAR(255),
pname VARCHAR(255),
trade_name VARCHAR(255),
FOREIGN KEY (dssn, pre_no) REFERENCES Prescription(dssn, pre_no),
FOREIGN KEY (pname, trade_name) REFERENCES Drug(pname, trade_name)
);
答案 0 :(得分:0)
因此,根据错误,很明显您已超过最大限制。对于MyISAM表,它是1000字节,对于InnoDB,它设置为767字节。
答案 1 :(得分:0)
此错误表示索引索引的长度超过1000个字节。 MySQL和存储引擎可能有此限制。 MySQL 5.5上有类似的错误 - '指定密钥太长;运行此脚本时,最大密钥长度为3072字节:
CREATE TABLE IF NOT EXISTS example_table1 (
first_col varchar(500) NOT NULL,
second_col varchar(500) NOT NULL,
third_col varchar(500) NOT NULL,
KEY `index` (first_col, second_col, third_col)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
UTF8是多字节的,密钥长度以这种方式计算--500 * 3 * 3 = 4500字节。
但请注意,下一个查询有效!
CREATE TABLE IF NOT EXISTS example_table1 (
first_col varchar(500) NOT NULL,
second_col varchar(500) NOT NULL,
third_col varchar(500) NOT NULL,
KEY `index` (first_col, second_col, third_col)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
答案 2 :(得分:0)
使用(我假设)utf8的字符集,VARCHAR(255)的索引需要255 x 3 = 765
个字节。
在您的情况下(255+255+255) x 3 = 2295
(对于每个varchar行)。
您可以通过将innodb_large_prefix设置为YES
以及您需要的其他设置来将MySQL 5.6中的最大InnoDB索引前缀大小增加到3072字节,以便启用该设置,如下所述:
http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_large_prefix