📅  最后修改于: 2023-12-03 14:43:45.583000             🧑  作者: Mango
当在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
配置项,将charset
和collation
的值改为以下内容:
'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及更高版本时非常有用。如果你遇到了这个错误,请尝试以上方法解决问题。