如何使用 Laravel 迁移将字符串列类型转换为整数?

Posted

技术标签:

【中文标题】如何使用 Laravel 迁移将字符串列类型转换为整数?【英文标题】:How to convert string column type to integer using Laravel migration? 【发布时间】:2020-03-17 11:47:55 【问题描述】:

我正在尝试使用 Laravel 迁移来更改列数据类型。但我面临以下错误。请帮帮我。

Schema::table('files', function(Blueprint $table) 
    $table->integer('app_id')->change();
    $table->index(['app_id', 'filename']);
);

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 1 行的“CHARACTER SET utf8 DEFAULT 0 NOT NULL COLLATE utf8_unicode_ci”附近使用正确的语法(SQL:ALTER TABLE files CHANGE app_id app_id INT CHARACTER SET utf8 DEFAULT 0 NOT NULL整理utf8_unicode_ci)

【问题讨论】:

这能回答你的问题吗? Laravel migrations change a column type from varchar to longText 不适用于以下 $table->integer('app_id')->change();当我将字符串转换为整数 CHARACTER SET utf8 时自动添加。这个怎么去掉? 你的 laravel 项目中有 doctrine/dbal 包吗? 是的,我有学说/dbal。 我没有改变任何东西。这是一个全新的安装 【参考方案1】:

作为https://github.com/doctrine/dbal/issues/3714 的替代解决方案,您可以执行以下操作:

Schema::table('member_section', function (Blueprint $table) 
    $table->bigInteger('type')->charset(null)->collation(null)->change();
);

【讨论】:

【参考方案2】:

您的问题很可能是由最新版本的 doctrine/dbal 软件包中的错误引起的。该问题由v2.10.0 引入。

您可以随时将composer.json 中的软件包降级为v2.9.3,它应该可以正常工作。

在此处查看官方问题:https://github.com/doctrine/dbal/issues/3714

【讨论】:

哇,我在这上面浪费了好几个小时才终于找到你的帖子。 Laravel 和 Doctrine 一直在互相指责。它仍然没有解决。我暂时忽略。 github.com/laravel/framework/issues/…

以上是关于如何使用 Laravel 迁移将字符串列类型转换为整数?的主要内容,如果未能解决你的问题,请参考以下文章

将字符串列类型转换为小数

使用 SQL 将字符串列转换为 mongodb 中的日期时间

如何在pyspark中将字符串列转换为ArrayType

如何在 laravel 迁移中将字符串转换为布尔值?

将字符串列转换为日期时间格式

如何将字符串列转换为列表