【发布时间】:2020-06-01 18:38:10
【问题描述】:
我正在尝试更改我当前的表,并且可以使用我的迁移文件中的 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 服务器版本相对应的手册 在'CHARACTER SET utf8mb4 DEFAULT'0'附近使用正确的语法 NOT NULL COLLATE
utf8mb4_unicode_ci, CHANGE ' 在第 1 行 (SQL: ALTER 表 xyz 更改funding_neededfunding_needed NUMERIC(10, 2) CHARACTER SET utf8mb4 DEFAULT '0' NOT NULL COLLATEutf8mb4_unicode_ci,更改资金_已收到资金_已收到 NUMERIC(10, 2) 字符集 utf8mb4 默认 '0' NOT NULL 整理utf8mb4_unicode_ci)
由于在生产环境中运行,我想以第二种方式进行。我不想修改生产迁移以匹配我的生产数据库。
【问题讨论】:
-
不知道您遇到的具体错误,但是,我认为一起使用 NOT NULL 和 DEFAULT 是多余的。如果它有一个默认值,那么显然不会为空,对吧?
-
你是对的。我只是想匹配 SQL 查询。如果我删除
nullable(false)并只保留默认值,它仍然无法正常运行。 -
您是否尝试过将参数作为字符串传递? 0.00 可能不是 php 中的有效数字,“0.00”
-
作为一个字符串工作,但不能作为一个小数。我正在尝试将其从字符串更改为小数
-
我的意思是,
$table->decimal('funding_needed', 10, 2)->nullable(false)->default("0.00")->change();
标签: php mysql sql laravel migration