MySQL:#1089 – 错误的前缀键
在MySQL中,当你在创建表或添加索引时遇到“Incorrect prefix key”(错误的前缀键)错误时,这意味着你正在尝试创建一个长度不合法的索引。
例如,假设你有以下表:
CREATE TABLE `my_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`description` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`(30)),
KEY `description` (`description`(100))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
在上述表结构中,我们创建了两个索引,分别是“name”和“description”,但是我们使用了“(30)”和“(100)”来限制索引列的长度。
如果你尝试添加一个长度不足30个字符的名称,例如“John”,MySQL将无法创建索引并返回错误:
INSERT INTO `my_table` (`name`, `description`) VALUES ('John', 'John is a programmer');
# 以上命令会报错:#1089 - Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys
答案很简单,因为“John”不够长,不能匹配“VARCHAR(30)”索引。同样,如果你尝试添加一个长度不足100个字符的描述,MySQL将返回相同的错误。
请注意,如果您尝试创建一个用于CHAR,TEXT或BLOB列的索引,您必须指定完整的列长度,因为MySQL无法以特定方式截断这些列的值。
阅读更多:MySQL 教程
总结
如果你遇到“Incorrect prefix key”(错误的前缀键)错误,这意味着你正在尝试创建一个长度不合法的索引。请确保索引列的长度与存储的值匹配。如果您使用CHAR,TEXT或BLOB列,则必须指定完整的列长度。
希望这篇文章能够帮助你解决MySQL中的错误。感谢您的阅读!