SQLSTATE[42000] Syntax error or access violation Specified key was too long error 解决

2019-04-27 05:28:12   错误异常

Laravel 5.4对默认数据库字符集进行了更改,现在utf8mb4它包括对存储表情符号的支持。这只会影响新的应用程序,只要您运行MySQL v5.7.7及更高版本,就不需要做任何事情。

laravel-key-too-long

对于运行旧版MySQL的用户,在尝试运行迁移时可能会遇到此错误:

[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

正如migrate指南中所述,要解决此问题,您只需编辑AppServiceProvider.php文件并在boot方法内设置默认字符串长度:

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

还有同学说不能用Schema,要用Bulider,如下图:

Bulider

之后,一切都应该正常工作。当然,还是建议您更换您的数据库版本,用MySQL5.7.7以及更高版本。


另外,有网友说需要修改config文件夹下的database.php,将'engine' => null改为'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',不过改完记得清理下缓存:

php artisan cache:clear
php artisan config:clear
vien.tech版权所有,允许转载,但转载请注明出处和原文链接: https://viencoding.com/article/156
欢迎小伙伴们在下方评论区留言 ~ O(∩_∩)O
文章对我有帮助, 点此请博主吃包辣条 ~ O(∩_∩)O

猜你喜欢


评论

There are no comments yet.
未登录

登录后即可发表评论

登录或注册