laravel5.5报错:1071 Specified key was too long; max key length is 767 bytes

Auth:黙罗克       Date:2026/05/23       Cat:未分类       Word:共740字       Views:39

🕗️ 2026/05/23   👁️ 浏览:39   💬 暂无评论

这是因为数据库表单个列的索引不能超过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的报错,好了,希望能帮助到你。

作者: 简介:

链接:https://www.7ss.cn/1474.html

声明:本站禁止任何形式的文章转载。

赞助:若你觉得本文对你有启发,非常欢迎你成为我的 Sponsor ,感恩遇见

《laravel5.5报错:1071 Specified key was too long; max key length is 767 bytes》留言数:0

发表留言