将字符串更改为十进制拉维尔迁移

我正在尝试更改我的当前表,并且可以在我的迁移文件中使用SQL查询来做到这一点,如下所示:


<?php

    public function up()

    {

        Schema::table('xyz', function (Blueprint $table) {

        DB::statement('ALTER TABLE mydatabase.xyz CHANGE funding_needed funding_needed decimal(10, 2) NOT NULL DEFAULT 0.00 ');

        DB::statement('ALTER TABLE mydatabase.xyz CHANGE funding_received funding_received decimal(10, 2) NOT NULL DEFAULT 0.00 ');

        });

    }

    /**

     * Reverse the migrations.

     *

     * @return void

     */

    public function down()

    {

        Schema::table('xyz', function (Blueprint $table) {

        DB::statement('ALTER TABLE mydatabase.xyz CHANGE funding_needed funding_needed varchar(191) NOT NULL ');

        DB::statement('ALTER TABLE mydatabase.xyz CHANGE funding_received funding_received varchar(191) NOT NULL DEFAULT 0');

        });

    }


但是如果我这样做,我会收到一个错误:


<?php

    public function up()

    {

        Schema::table('xyz', function (Blueprint $table) {

             $table->decimal('funding_needed', 10, 2)->nullable(false)->default(0.00)->change();

             $table->decimal('funding_received', 10, 2)->nullable(false)->default(0.00)->change();

        });

    }

    /**

     * Reverse the migrations.

     *

     * @return void

     */

    public function down()

    {

        Schema::table('xyz', function (Blueprint $table) {          

         $table->string('funding_needed', 191)->nullable(false)->default(false)->change();

         $table->string('funding_received', 191)->nullable(false)->default(0)->change();

        });

    }

错误:

语法错误或访问冲突: 1064 您的 SQL 语法有错误;检查与您的MySQL服务器版本相对应的手册,以获取在“字符集utf8mb4默认”0“附近使用的正确语法,而不是空排序,在第1行更改”(SQL:更改表xyz更改funding_needed funding_needed数字(10,2)字符集utf8mb4默认“0”不是空排序,更改funding_received funding_received数字(10, 2) 字符集 utf8mb4 默认“0”不为空排序规则utf8mb4_unicode_ciutf8mb4_unicode_ciutf8mb4_unicode_ci)

我想用第二种方式来做,因为在生产中运行它。我不想修改生产迁移以匹配我的生产数据库。


九州编程
浏览 206回答 2
2回答

30秒到达战场

正如这个&nbsp;Github 线程中所指出的,对于教义/dbal 包(即在运行此更新迁移之前安装的包),在更改列类型时存在一个错误。同时使用 with 应作为解决方法,如链接所示。->charset(null)->change()

慕田峪9158850

伙计们,我很难转换,正如@echo评论中所说stringdecimal->charset(null)->change();做了伎俩!谢谢,伙计们节省了我的时间!
打开App,查看更多内容
随时随地看视频慕课网APP