为什么会出现这个错误 #1071 - 指定的键太长;最大键长度为1000字节?
为什么会出现这个错误 #1071 - 指定的键太长;最大键长度为1000字节?
可能重复:
“指定的键太长;最大键长度为1000字节”
SQL查询:
创建表`freecomputermarket`.`Members`(
`ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`UserName` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`Email` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`Password` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`BirthDate` DATE NOT NULL,
`RegisterationDate` DATE NOT NULL,
`ActivationCode` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`ActivationLink` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`IsActive` BIT(0) NOT NULL,
`Gender` CHAR(6) NOT NULL,
UNIQUE (
`UserName`,
`ActivationCode`,
`ActivationLink`
)
) ENGINE = MYISAM
当我执行这个查询时出现错误“#1071 - 指定的键太长;最大键长度为1000字节”?
为什么会出现错误 #1071 - 指定的键太长;最大键长度为1000字节?
在您的UNIQUE
索引中有三个255字符的UTF8列。每个UTF8字符最多可以占用3个字节,因此每列最多可以占用765个字节,这使得整个索引的总字节数达到2295个字节,超过了1000个字节的限制,正如错误所指出的那样。
解决方法:
解决此问题的方法是减少索引列的长度,以确保总字节数不超过1000个字节的限制。以下是几种解决方法:
1. 缩短列的长度:
- 将列的长度减少到较短的值,以确保总字节数在1000个字节以下。
2. 更改索引类型:
- 将索引类型更改为非唯一索引(INDEX
)而不是唯一索引(UNIQUE
)。非唯一索引没有总字节数的限制。
3. 更改字符集和排序规则:
- 将字符集和排序规则更改为占用更少字节的选项,如Latin1字符集。
- 请注意,更改字符集和排序规则可能会影响数据的存储和排序方式。
请根据您的需求选择适合的解决方法,并确保在更改数据库结构之前备份数据以防止意外数据丢失。