laravel 5.4 迁移无法正常工作

Posted

技术标签:

【中文标题】laravel 5.4 迁移无法正常工作【英文标题】:laravel 5.4 migration not working properly 【发布时间】:2017-10-05 05:00:19 【问题描述】:

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

$ php artisan migrate 迁移表创建成功。

[Illuminate\Database\QueryException] SQLSTATE[42000]:语法错误 或访问冲突:1071 指定的密钥太长;最大键 长度为767字节(SQL:alter table users add unique users_email_unique(email))

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

【问题讨论】:

【参考方案1】:

Laravel 5.4 默认使用utf8mb4。解决此错误的一种方法是默认返回utf8

转到您的config\database.php 并将数据库charset 更改为uft8 并将collation 更改为utf8_unicode_ci

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

【讨论】:

【参考方案2】:

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

你只需要设置你的字符限制来纠正一个。从这里读到 Laravel Index Length

索引长度和 MySQL / MariaDB

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

use Illuminate\Support\Facades\Schema;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()

    Schema::defaultStringLength(191);

或者,您可以启用innodb_large_prefix 选项 数据库。请参阅数据库的文档以获取有关 如何正确启用此选项。

【讨论】:

【参考方案3】:

这是 Laravel 5.4 中的一个错误

要修复它,请将其放在 Schema::create 方法调用之上:

Schema::defaultStringLength(191);

在这里阅读更多:

https://github.com/laravel/framework/issues/17508

【讨论】:

以上是关于laravel 5.4 迁移无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4数据库迁移不起作用[重复]

php artisan migrate 不适用于 Laravel 5.4 中的 XAMPP

方法验证不存在 - Laravel 5.4

laravel 5.4 迁移问题

Laravel 5.4 迁移 ENUM 在 MySQL 中失败

使用迁移 Laravel 5.4 更新列