Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.3-SQLSTATE[HY000]:一般错误:1366不正确的整数值_Php_Sql_Laravel_Migration - Fatal编程技术网

Php Laravel 5.3-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();

为什么每次尝试在迁移中发布数据类型为整数的空输入时,都会出现以下错误:

SQLSTATE[HY000]:一般错误:1366不正确的整数值

我的迁移:

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
值,这是没有意义的。