我希望我的问题有道理,因为我对自己应该做的事情感到有些困惑。
我克隆了一个laravel项目,该文件夹中已有大约20个迁移。根据我的理解,迁移是表格吗?
我创建了一个空的mysql数据库,链接到这个laravel项目,该项目当前有一个migrations
表和一个users
表。
我认为我应该做一些事情来生成在新数据库上的迁移文件夹中编写的表,但我不确定如何。
到目前为止,我已经使用了该命令
php artisan migrate
会生成migrations
和users
表,并会出现这些错误。
[Illuminate \ Database \ QueryException] SQLSTATE [42000]:语法错误 或访问冲突:1071指定密钥长;最大键 length是1000个字节(SQL:alter table users添加唯一的 users_email_unique(电子邮件))
[Doctrine \ DBAL \ Driver \ PDOException] SQLSTATE [42000]:语法错误 或访问冲突:1071指定密钥长;最大键 长度是1000字节
[PDOException] SQLSTATE [42000]:语法错误或访问冲突: 1071指定密钥长;最大密钥长度为1000字节
答案 0 :(得分:3)
Laravel 5.4对默认数据库字符集进行了更改,现在是utf8mb4,其中包括对存储表情符号的支持。这只会影响新的应用程序,只要您运行MySQL v5.7.7及更高版本,就不需要做任何事情。
对于那些运行MariaDB或旧版本MySQL的用户,在尝试运行迁移时可能会遇到此错误:
[照亮\数据库\ QueryException] SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥太长;最大密钥长度为767字节(SQL:alter table users添加唯一users_email_unique(email))
[PDOException] SQLSTATE [42000]:语法错误或访问冲突:1071指定密钥太长;最大密钥长度为767字节
正如迁移指南中所述,为了解决这个问题,您只需编辑AppServiceProvider.php文件并在boot方法中设置默认字符串长度:
typedef Vehicle* pVehicle;
manager.exists(
lookFor,
[](const pVehicle & a) -> std::string { return a->licensePlate;}
);