在Laravel 5.4上使用php artisan make:auth迁移错误

[Illuminate\Database\QueryException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter tabl e users add unique users_email_unique(email)) [PDOException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes


当前回答

正如迁移指南中所概述的那样,你所要做的就是编辑app/Providers/AppServiceProvider.php文件,并在boot方法中设置默认字符串长度:

use Illuminate\Support\Facades\Schema;

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

注意:首先你必须从数据库中删除(如果你有)users表,password_resets表,并从迁移表中删除users和password_resets条目。

要运行所有未完成的迁移,执行migrate Artisan命令:

php artisan migrate

在那之后,一切都应该正常工作。

其他回答

没有人告诉的解决方案是,在Mysql v5.5和以后的InnoDB是默认的存储引擎,它没有这个问题,但在许多情况下,像我的,有一些旧的Mysql ini配置文件使用旧的MYISAM存储引擎,如下所示。

default-storage-engine=MYISAM

这造成了所有这些问题,解决方案是将Mysql的ini配置文件中的默认存储引擎一劳永逸地更改为InnoDB,而不是做临时的hack。

default-storage-engine=InnoDB

如果你在MySql v5.5或更高版本,那么InnoDB是默认引擎,所以你不需要像上面那样显式地设置它,只要从你的ini文件中删除default-storage-engine=MYISAM(如果它存在),你就可以开始了。

我添加了两个对我有用的解决方案。

第一个解决方案是:

在config目录下打开database.php文件。 将'engine' =>修改为'engine' => 'InnoDB' 这对我很管用。

第二个解决方案是:

在config目录下打开database.php文件。 2.编辑'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 来 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci',

古德勒克

与其设置长度限制,我建议以下方法,这对我来说很有效。

内部:

配置/ database.php

将这一行替换为mysql:

'engine' => 'InnoDB ROW_FORMAT=DYNAMIC',

:

'engine' => null,

只要在/etc/mysql/mariadb.conf.d/50-server.cnf或其他配置文件中写几行:

innodb-file-format=barracuda
innodb-file-per-table=ON
innodb-large-prefix=ON
innodb_default_row_format = 'DYNAMIC'

和sudo服务mysql重启

https://stackoverflow.com/a/57465235/778234

查看文档:https://dev.mysql.com/doc/refman/5.6/en/innodb-row-format.html

如果你没有任何数据已经分配到你的数据库执行以下操作:

进入app/Providers/ appserviceprovider .php并添加

使用说明\ \ ServiceProvider的支持;

在方法boot()内部;

模式:defaultStringLength (191);

现在删除数据库中的记录,用户表中的ex。 运行以下命令

PHP工匠配置:缓存 PHP工匠迁移