Php Laravel 5.3-SQLSTATE[HY000]:一般错误:1366不正确的整数值
为什么每次尝试在迁移中发布数据类型为整数的空输入时,都会出现以下错误: SQLSTATE[HY000]:一般错误:1366不正确的整数值 我的迁移:Php Laravel 5.3-SQLSTATE[HY000]:一般错误:1366不正确的整数值,php,sql,laravel,migration,Php,Sql,Laravel,Migration,为什么每次尝试在迁移中发布数据类型为整数的空输入时,都会出现以下错误: SQLSTATE[HY000]:一般错误:1366不正确的整数值 我的迁移: public function up() { Schema::table('dossiers', function (Blueprint $table) { $table->integer('amount_of_cilinders')->nullable();
public function up()
{
Schema::table('dossiers', function (Blueprint $table) {
$table->integer('amount_of_cilinders')->nullable();
$table->integer('amount_of_doors')->nullable();
$table->integer('manufacturing_year')->nullable();
$table->integer('manufacturing_month')->nullable();
$table->date('date_first_admission')->nullable();
$table->integer('weight')->nullable();
$table->integer('power')->nullable();
});
}
我的控制器:
public function update(Request $request, Dossier $dossier)
{
$this->validate($request, [
'date_first_admission' => 'date',
]);
$dossier->update($request->all());
return redirect('/dossiers/' . $dossier->id);
}
更新:
我决定将数据类型更改为string
,因为我没有在其他地方使用这些列
例如,
$table->string('power')->nullable()代码>这可能是因为MySQL在严格模式下运行
在MySQL CLI中运行以下查询,以检查数据库是否处于严格模式:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
如果它包含严格的\u TRANS\u表,您可以尝试运行:
SET @@global.sql_mode= 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
这可能是因为MySQL在严格模式下运行
在MySQL CLI中运行以下查询,以检查数据库是否处于严格模式:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
如果它包含严格的\u TRANS\u表,您可以尝试运行:
SET @@global.sql_mode= 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
Null并不意味着空字符串。向迁移中的所有列添加->default(0)
$table->integer('power')->default(0)->nullable();
或
在模型中使用,在传递值之前进行检查:
public function setPowerAttribute($value){
$this->attributes['power'] = (empty($value) ? 0 : $value);
}
Null并不意味着空字符串。向迁移中的所有列添加->default(0)
$table->integer('power')->default(0)->nullable();
或
在模型中使用,在传递值之前进行检查:
public function setPowerAttribute($value){
$this->attributes['power'] = (empty($value) ? 0 : $value);
}
使用nullable()
时,表示默认设置为NULL。因此,将其设为默认值0
,如下所示:
$table->integer('COLUMNNAME')->default(0);
使用nullable()
时,表示默认设置为NULL。因此,将其设为默认值0
,如下所示:
$table->integer('COLUMNNAME')->default(0);
我可能完全关闭了,但是空值在数字字段中无效。如果不输入任何内容,输入返回的值可能是空字符串。这将触发SQL错误,因为您可以
- 按顺序传递有效的数值,如“0”
- 传递NULL值(如果nullable为true-请参阅SQL“三态”逻辑)
空字符串既不是0,也不是NULL
也许这篇文章可以帮助你,它在使用验证规则时处理了一个类似的奇怪现象,我想这可能是这种行为的另一种表现
Armin.I可能完全关闭,但在数字字段中,AFAIK空值无效。如果不输入任何内容,输入返回的值可能是空字符串。这将触发SQL错误,因为您可以
- 按顺序传递有效的数值,如“0”
- 传递NULL值(如果nullable为true-请参阅SQL“三态”逻辑)
空字符串既不是0,也不是NULL
也许这篇文章可以帮助你,它在使用验证规则时处理了一个类似的奇怪现象,我想这可能是这种行为的另一种表现
Armin.看看这里:你能打印你的request()->all()
让我们看看里面有什么吗?看看这里:你能打印你的request()->all()
让我们看看里面有什么吗…这样很有效,但是,我真的必须在需要整数的输入中使用这个0值吗?正如您所知,NULL
不是一个整数值,您试图在默认情况下使用“nullable()”来设置NULL
值,这是没有意义的,但是,我真的必须在需要整数的输入中使用这个0值吗?正如您所知,NULL
不是一个整数值,您试图在默认情况下使用“nullable()”设置NULL
值,这是没有意义的。