You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel迁移报错:1071 Specified key was too long,最大密钥长度1000字节

解决Laravel全新项目migrate时出现1071键过长错误

刚创建的Laravel项目没做任何修改,执行php artisan migrate就弹出Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes错误,核心原因是Laravel默认用utf8mb4字符集(每个字符占4字节),但部分MySQL环境(比如用MyISAM引擎、或数据库默认字符集为utf8)的索引最大长度限制是1000字节,默认的字符串字段索引长度超出了这个限制。

下面是几种靠谱的解决办法:

方法一:全局设置默认字符串长度

这是最常用的快捷方案,不用改数据库配置:

  • 打开项目里的app/Providers/AppServiceProvider.php文件
  • 在boot()方法里加入以下代码:
use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}
  • 保存文件后,重新执行php artisan migrate即可

方法二:修改MySQL配置(适合有权限操作服务器的场景)

如果希望保留Laravel默认的字段长度,可以调整MySQL的配置来支持更长的索引:

  • 找到MySQL的配置文件(Linux一般是/etc/my.cnf,Windows可能是my.ini)
  • 在[mysqld]区块添加或修改以下配置:
innodb_file_per_table = 1
innodb_large_prefix = 1
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
  • 重启MySQL服务,之后再跑迁移命令就正常了

方法三:手动指定迁移文件中的字段长度

如果不想全局修改,也可以在单个迁移文件里给字符串字段指定长度,比如:

$table->string('email', 191)->unique();

这样单独设置后,该字段的索引长度就不会超出限制了

内容的提问来源于stack exchange,提问作者matima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:05:21