|-转 laravel中执行migrate数据库迁移的Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
原来此索引为组合索引,字段是tokenable_type和tokenable_id,组合索引的长度为两个字段的长度和,那么会报错也就不奇怪了。如果是3个字段或者更多字段的组合索引,那就要把每个字段的长度都加一起,不能超过提示的1000字节
先说解决方法:
在laravel的app/Providers/AppServiceProvider.php中boot方法内,加入长度限制:

至于为什么是248,那是因为在laravel给出的自带的5张表中,248是能加入的最大值(这个根据数据库版本以及字符集不同会有差别)
下面说一说解决过程:
首先,如果直接执行迁移,会抛出一个user表的错误,看错误信息也很容易理解错误原因:

是因为字符长度太长了,在MYISAM类型表中,单列索引和组合索引的长度都是1000字节(这里表类型不同可能长度限制也不同,以及跟数据库的版本也有关系,具体得看自己的实际情况)
我们找到Schema/Builder.php中可以看到laravel给的默认值字符长度是255:

我的字符集为utf8mb4,一个字符长度等于4字节
很显然255×4超过1000了,理论上改成250就正好等于1000,于是我在boot方法内将长度设置为250:
...
浏览更多内容请先登录。
立即注册
更新于:2026-05-26 16:15:44
相关内容
msyql备份数据的语句mysqldump使用
Fedora42 操作系统的安装 Fedora system install
在 Fedora 42 上安装 NVIDIA 驱动(P104-100)
Fedora 42 上安装 NVIDIA P104 - 100 显卡驱动
fedora 42连接vpn报错,fedora vpn connection failed
elive 连接vpn报错,fedora vpn connection failed reason second 20250920
other System
E: The repository 'https://download.opensuse.org/....:/release/Debia...
Laravel学习
Laravel 一个 HTTP 请求从进入系统到返回响应的完整旅程
laravel中执行migrate数据库迁移的Syntax error or access violation: 1071 ...
Route::inertia('/', 'Welcome')->name('home'); 是什么意思
laravel13的命令composer run dev,是如何工作的,流程是什么
laravel13官方方案解决跨域php artisan config:publish cors
我没有设置teams.show的路由,为什么可以访问对应地址的
laravel项目
Laravel-Backpack/CRUD,一条命令生成对应模型的后台管理页面
misterdebug/crud-generator-laravel 生成模型,控制器,视图文件
后台管理脚手架 filament
推荐内容