今天在MySQL 5.6版本的数据库中导入包含InnoDB表的SQL脚本时遇到了"ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes"错误。
问题原因:错误是指超出索引字节的限制,并不是指字段长度限制。
样例SQL脚本:
DROP TABLE IF EXISTS `accounts`;
CREATE TABLE `accounts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`keyword` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`token` varchar(255) DEFAULT NULL,
`add_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除',
`chongzhijifen` int(11) DEFAULT '0',
`chongzhiyuanbao` int(11) DEFAULT '0',
`yaoqingma` varchar(255) DEFAULT NULL,
`block` int(11) DEFAULT '0' COMMENT '0:正常 1:封号',
`code` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`),
KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5863 DEFAULT CHARSET=utf8mb4;
解决办法:
启用系统变量innodb_large_prefix和innodb_file_format
1:系统变量innodb_large_prefix为ON
2: 系统变量innodb_file_format为Barracuda
3: ROW_FORMAT为DYNAMIC或COMPRESSED
详细内容参考:https://www.cnblogs.com/kerrycode/p/9680881.html