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 方法内设置默认字符串的长度:
<?phpuse 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
这两种解决方案是从根源解决问题。
