📜  laravel mysql 指定的键太长 - PHP (1)

📅  最后修改于: 2023-12-03 14:43:45.583000             🧑  作者: Mango

Laravel MySQL 指定的键太长 - PHP

当在Laravel中使用MySQL数据库时,经常会遇到“Specified key was too long”错误。这个错误通常出现在Laravel 5.4版本及更高版本中,并且与MySQL版本5.7.7及更高版本有关。

问题原因

MySQL版本5.7.7及更高版本中引入了一个新的“utf8mb4”字符集,它支持存储更广泛的字符集,包括emoji表情符号。但是,这个字符集使用的是4字节的Unicode编码,而原来的“utf8”字符集只使用3字节的编码。这导致了MySQL索引的长度超过了限制。

解决方法
方法一:修改默认的字符编码

在Laravel 5.4及更高版本中,默认情况下会使用“utf8mb4”字符集。如果你不需要支持这个字符集,可以将默认的字符编码修改为“utf8”,这样就可以避免这个问题了。要修改默认的字符编码,在config/database.php文件中找到mysql配置项,将charsetcollation的值改为以下内容:

'charset' => 'utf8',
'collation' => 'utf8_general_ci',
方法二:手动设置索引长度

如果你需要使用“utf8mb4”字符集,就必须手动设置索引长度,以避免超出最大长度限制。可以在AppServiceProvider类的boot方法中添加以下代码:

use Illuminate\Support\Facades\Schema;

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

这个方法会将默认的字符串长度限制设置为191,这是MySQL最大索引长度限制。

结论

以上两种方法都可以解决“Specified key was too long”错误,在使用MySQL版本5.7.7及更高版本时非常有用。如果你遇到了这个错误,请尝试以上方法解决问题。