Laravel学习

laravel中执行migrate数据库迁移的Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes

PHPer 2026-05-26 12 0 0

原来此索引为组合索引,字段是tokenable_type和tokenable_id,组合索引的长度为两个字段的长度和,那么会报错也就不奇怪了。如果是3个字段或者更多字段的组合索引,那就要把每个字段的长度都加一起,不能超过提示的1000字节

先说解决方法:

在laravel的app/Providers/AppServiceProvider.php中boot方法内,加入长度限制:

2905651-20220629100621772-1151983270.png

至于为什么是248,那是因为在laravel给出的自带的5张表中,248是能加入的最大值(这个根据数据库版本以及字符集不同会有差别)

下面说一说解决过程:

首先,如果直接执行迁移,会抛出一个user表的错误,看错误信息也很容易理解错误原因:

2905651-20220629101656521-99894813.png

是因为字符长度太长了,在MYISAM类型表中,单列索引和组合索引的长度都是1000字节(这里表类型不同可能长度限制也不同,以及跟数据库的版本也有关系,具体得看自己的实际情况)

我们找到Schema/Builder.php中可以看到laravel给的默认值字符长度是255:

2905651-20220629104146495-2115736320.png

我的字符集为utf8mb4,一个字符长度等于4字节

很显然255×4超过1000了,理论上改成250就正好等于1000,于是我在boot方法内将长度设置为250:

2905651-20220629130957648-1499825417.png...

立即注册
更新于: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

    推荐内容

    真枪实弹,假戏真做,12部具有“实干精神”的电影!

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    BT磁力搜索网站汇总和找不到的资源

    什么是磁力链接,您如何使用?

    Z-Library:全球最大的数字图书馆/含打不开的解决方案/镜像

    使用V2Ray的mKCP协议加速游戏

    v2rayN已停止工作