laravel 默认的数据库字符集为utf8mb4。如果你运行MySQL v5.7.7或者更高版本,则无需做任何修改,但是如果运行的MySQL版本低于v5.7.7,那么在运行migrations命令时,可能会碰到下面这个错误:
[IlluminateDatabaseQueryException]
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))
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes
我们可以在 appProvidersAppServiceProvider.php 文件里中的 boot 方法里设置一个默认值来解决这个错误:
Schema::defaultStringLength(191);
完整的AppServerProvider.php文件代码如下:
<?php
namespace AppProviders;
use IlluminateSupportServiceProvider;
use IlluminateSupportFacadesSchema;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Schema::defaultStringLength(191);
}
public function register()
{
//
}
}
说明: 异常中明确指明最大长度是767字节,utf8mb4编码每字符使用4字节,所以 767 / 4 = 191.75,所以将string的默认长度设置为191字符即可。
想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
如有侵权请发送邮件至1943759704@qq.com删除
码农资源网 » Laravel提示:SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes错误
本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
如有侵权请发送邮件至1943759704@qq.com删除
码农资源网 » Laravel提示:SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes错误