Php laravel 5.4迁移工作不正常

Php laravel 5.4迁移工作不正常,php,laravel-5,laravel-5.4,Php,Laravel 5,Laravel 5.4,我在使用laravel迁移在数据库中创建表时遇到了这个问题。我不知道它可能出了什么问题,因为我在以前的系统上使用了相同的命令。这是我在使用composer创建表时遇到的错误 $php artisan迁移迁移表已成功创建 [Illumb\Database\QueryException]SQLSTATE[42000]:语法错误 或访问冲突:1071指定的密钥太长;最大键 长度为767字节(SQL:ALTERTABLEusersaddunique 用户\u电子邮件\u唯一(电子邮件) [PDOExce

我在使用laravel迁移在数据库中创建表时遇到了这个问题。我不知道它可能出了什么问题,因为我在以前的系统上使用了相同的命令。这是我在使用composer创建表时遇到的错误

$php artisan迁移迁移表已成功创建

[Illumb\Database\QueryException]SQLSTATE[42000]:语法错误 或访问冲突:1071指定的密钥太长;最大键 长度为767字节(SQL:ALTERTABLE
users
addunique

用户\u电子邮件\u唯一
电子邮件

[PDOException]SQLSTATE[42000]:语法错误或访问冲突: 1071指定的密钥太长;最大密钥长度为767字节


这是Laravel 5.4中的一个错误

若要修复此问题,请将其置于Schema::create方法调用之上:

Schema::defaultStringLength(191);
请在此处阅读更多信息:


默认情况下,Laravel 5.4使用
utf8mb4
。修复此错误的一种方法是默认返回到
utf8

转到
config\database.php
并将数据库
charset
更改为
uft8
,将
排序规则更改为
utf8\u unicode\u ci

'mysql' => [
    //..
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    //..
],

字符限制取决于您使用的字符集
Laravel
使用的是
utf8mb4
,最大索引的字符限制为
191

您只需将角色限制设置为正确的。读这封信

索引长度&MySQL/MariaDB

默认情况下,Laravel使用
utf8mb4
字符集,其中包括 支持在数据库中存储“emojis”。如果您正在运行 比
5.7.7
版本更早的
MySQL版本,或比
MariaDB
版本更早的
10.2.2
版本中,您可能需要手动配置默认值 迁移生成的字符串长度,以便MySQL创建 它们的索引。您可以通过调用
AppServiceProvider中的
Schema::defaultStringLength
方法:

或者,您可以为您的应用程序启用
innodb\u large\u prefix
选项 数据库请参阅数据库文档,以了解有关的说明 如何正确启用此选项

use Illuminate\Support\Facades\Schema;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Schema::defaultStringLength(191);
}