mysql5.7以下默认情况下单个列的索引不能超过767位
可以启用innodb_large_prefix选项,将约束项扩展至3072byte;
set global innodb_large_prefix=1;
set global innodb_file_format=BARRACUDA;
可是我用的是mysql8.0版本的,里面已经没有innodb_large_prefix这个参数了。
我的表里的一个字段spname是varchar(3000)的,这个原先在创建表的时候为了填入尽可能多的内容,预留了较大的长度,通过select max(length(spname)) from specialscore(我的表名),发现里面该字段的最大长度只有1276字节,因此将该字段修改为varchar(1300)的,再次尝试给它创建索引仍然报上述的错误,于是按照网上的指导,给该字段创建前缀索引,如下:
alter table specialscore add index spname_pre_idx(spname(100));
其中,spname_pre_idx是自己写的前缀索引名称,注意括号里的spname(100),也不是越大越好的,我是根据自己字段值大部分时候不会超过1000字节去定的。