数据库
首页 > 数据库> > PHP-为什么mysql接受非空字段为null

PHP-为什么mysql接受非空字段为null

作者:互联网

我正在学习laravel 5.1到laracast fundamentals series,在有关迁移的第7集中,我用这样的迁移建立了一个表:

public function up()
{
    Schema::create('articles', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title');
        $table->text('body');
        $table->timestamps();
        $table->timestamp('published_at');
    });
}

就像在第10集中说的那样,当我通过没有时间戳字段的表单将文章添加到数据库中时,这应该行不通,并且应该通过Not Null约束失败的例外进行操作,但是令人难以置信的是,文章添加了到桌子.
当我查看phpmyadmin结构中的表中的published_at列时,它没有选中null复选框,因此它不应该接受null吗?这是真的?
但后来我注意到,迁移将published_at列的默认值设置为0000-00-00 00:00:00.为什么?!并会覆盖NULL条件吗?
然后,我尝试将默认值设置为none,但仍未检查null.再次,我尝试添加不包含published_at字段的文章,但是再次向表中添加了一条新行,published_at值设置为0000-00-00 00:00:00.
有什么解释吗?

我将wampserver与mysql v5.6.17,php v5.5.12一起使用

解决方法:

选择@@ SQL_MODE;.

如果没有看到启用的Strict SQL Modes之一,则说明MySQL正在使用其较早的行为,并将无效值强制转换为有效值以允许插入行.

If strict mode is not in effect, MySQL inserts adjusted values for invalid or missing values and produces warnings.

官方MySQL Server 5.6附带的默认配置文件已启用STRICT_TRANS_TABLES. WAMP可能没有遵循相同的约定,可能是出于向后兼容的原因……但是可以更改配置.

标签:laravel,laravel-5,laravel-5-1,mysql,php
来源: https://codeday.me/bug/20191027/1945615.html