首页 > 解决方案 > Laravel 迁移中的回滚 UUID 类型

问题描述

我正在使用 Ramsey\Uuid 包切换到 UUID 主键,效果很好。到目前为止遇到的唯一问题是当我运行 php artisan migrate:rollback 将其更改回原始主键 ID 时:

Illuminate\Database\QueryException : SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的“CHARACTER SET utf8mb4 NOT NULL COLLATE utf8mb4_unicode_ci”附近使用正确的语法(SQL:ALTER TABLE model_has_roles CHANGE model_id model_id BIGINT UNSIGNED AUTO_INCREMENT CHARACTER SET utf 8mb4 NOT NULL COLLATE utf8mb4_unicode_ci

我的代码:

public function up()
{
    if(!Type::hasType('uuid')) {
        Type::addType('uuid', 'Ramsey\Uuid\Doctrine\UuidType');
    }

    Schema::table('model_has_roles', function (Blueprint $table) {
        $table->uuid('model_id')->change();
    });
}

public function down()
{
    Schema::table('model_has_roles', function (Blueprint $table) {
        $table->bigIncrements('model_id')->change();
    });

}

我究竟做错了什么?

标签: mysqldatabaselaraveluuidmigrate

解决方案


您似乎遇到了这个问题:https ://github.com/doctrine/dbal/issues/3714

共识是添加->charset(null)到您的列定义是在短期内解决问题的最佳方法。

尝试

public function down()
{
    Schema::table('model_has_roles', function (Blueprint $table) {
        $table->bigIncrements('model_id')->charset(null)->change();
    });
}

推荐阅读