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
相关产品推荐
相关产品推荐

