在创建xxl-job所需的数据库时,运行到下列语句后,出现了 Specified key was too long; max key length is 767 bytes错误提示。
CREATE TABLE `xxl_job_registry` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`registry_group` varchar(50) NOT NULL,
`registry_key` varchar(255) NOT NULL,
`registry_value` varchar(255) NOT NULL,
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
原因分析
在数据库中,索引的字段长度设置太长了,导致不支持。mysql建立索引时,数据库计算key的长度是累加所有index用到的字段的char长度,在按照下面的比例乘起来,不能超过限定的key长度767:
latin1 = 1 byte
uft8 = 3 byte
utf8mb4 = 4byte
gbk = 2 byte
因为xxl-job创建表的时候设置了CHARSET=utf8mb4,就等于是用索引字段的长度255*4=1020,所以创建不成功。