这是因为数据库表单个列的索引不能超过767位(不同版本可能存在差异)
于是utf8字符编码下,255*3 byte 超过限制,就报以上的错误了。
也有可能是由utf8转utf8mb4的时候,laravel改变了默认的数据库字符集。
utf8mb4最大支持4个字节长度,主键字段PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
字段相加后*3的长度远超767字节就会出现这个问题。
这个问题的处理:
1,要么升级MYSQL服务版本即可。
2,要么就是打开索引长度限制。
先查询一下当前数据库的版本,
SHOW variables like 'version';
在执行结果里面看版本,当然你如果知道具体版本也可以。
然后比如我们查询下 innodb_large_prefix 的表,看看状态是否是关闭状态。
SHOW variables like 'innodb_large_prefix';
5.6版本默认是关闭,5.7以后默认是开启的。
所以你使用的MySQL数据库高与或等于5.7的,默认是打开的,它就不会报错。如果低于该版本这个默认是关闭的,它就会报错。
如果你的程序是支持比较广泛的,支持5.6以上版本的,你只需要备份下数据,更换Mysql服务端版本至5.7或以上即可。
当然有些程序开发是在老的环境下使用的,不能高于,那么就用第二种打开索引长度限制的办法。
命令如下:
例如:你要支持INNODB_LARGE_PREFIX的表突破767位的限制,就执行以下命令。
SET GLOBAL INNODB_LARGE_PREFIX = ON;
执行后再查询下
SHOW variables like 'innodb_large_prefix';
看看状态是否是ON了。
这样就能解决以上767的报错,好了,希望能帮助到你。