MySQL:#1089 – 错误的前缀键

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中的错误。感谢您的阅读!

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程