Specified key was too long
[Illuminate\Database\QueryException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table users add unique users_email_unique (email))
[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
在 Laravel 5.4 之后的版本中使用 php artisan migrate
命令时有可能会出现此错误提醒,出现此错误的条件是:
- 表字段类型为 varchar
- 字段长度大于 191
- 该字段上添加有 unique 索引
- MySQL 版本小于 5.7.7
这里有一份较为官方的解决方案:Laravel 5.4 常见错误:Specified key was too long 。
你要做的是编辑 AppServiceProvider.php
文件,并在 boot
方法内设置默认字符串的长度:
<?php
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
在这里我推荐另外的解决方案
- 升级 MySQL 版本,当 MySQL 版本大于 5.7.7 时,此限制将被解除;
- 如果无法升级 MySQL 版本,参看这里,修改 MySQL 的参数配置:
innodb-file-format=Barracuda
innodb_large_prefix=ON
这两种解决方案是从根源解决问题。