讨论数量:
多读文档哦,Laravel 默认使用 utf8mb4 字符,你的数据库应该是utf8的,解决办法是手动配置迁移生成的默认字符串长度。 即在 AppServiceProvider 中调用 Schema::defaultStringLength 方法来配置它 :
use Illuminate\Support\Facades\Schema;
/**
* 引导任何应用程序服务。
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
具体文档在数据库:迁移中的索引长度 & MySQL / MariaDB部分。
为什么是191很多人不明白,简单解释下:utf8下3字节表示一个字符,utf8mb4是4字节表示一个字符,mysql默认情况下单个列的索引不能超过767位,utf8下长度255的索引占255X3=765,但Laravel 默认使用 utf8mb4 字符,这样255X4=1020,超过了767,改称191后,191X4=764。
推荐文章: