58

我刚刚从 MAMP 安装切换到原生 Apache、MySql 和 PHP 安装。我一切正常,但我已经开始在新环境中使用我的网络应用程序,突然任何 INSERT 命令都会导致以下错误:

SQLSTATE[HY000]:一般错误:1364 字段“display_name”没有默认值

看来我现在无法在以前可以的地方留空。我正在使用 MySql 版本 5.6.13

有没有办法在 MySql 中更改此设置?

4

7 回答 7

145

MySQL 很可能处于 STRICT 模式。

尝试运行SET GLOBAL sql_mode=''或编辑您的 my.cnf 以确保您没有设置STRICT_ALL_TABLES或类似内容。

于 2013-09-11T21:12:00.637 回答
21

MySQL 很可能处于STRICT模式,这不一定是一件坏事,因为您会及早发现错误/问题,而不是盲目地认为一切都按您的预期工作。

更改列以允许为空:

ALTER TABLE `x` CHANGE `display_name` `display_name` TEXT NULL

或者,给它一个默认值作为空字符串:

ALTER TABLE `x` CHANGE `display_name` `display_name` TEXT NOT NULL DEFAULT ''
于 2013-09-11T21:13:45.910 回答
16

所有这些答案都是一个好方法,但我认为你不想总是去你的数据库并修改你设置为NULL的默认值。

我建议你去app/User.php并修改它,protected $fillable这样它就会在用于注册的数据数组中获取你的新字段。

假设您添加了一个名为 的新输入字段"first_name",您$fillable应该是这样的:

protected $fillable = [ 'first_name', 'email', 'password',]; 

这为我做到了。祝你好运!

于 2016-11-27T00:15:34.927 回答
6

我也遇到了这个问题,在 laravel 中有两种方法可以解决这个问题。

  1. 第一个是您可以将默认值设置为null。我将向您展示一个示例:

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('gender');
            $table->string('slug');
            $table->string('pic')->nullable();
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }
    

如上例,您可以设置nullable()该功能。那么当您插入数据时,MySQL 将默认值设置为 null。

  1. 第二个是在您的模型中将您的输入字段设置为protected $fillable字段。例如:

    protected $fillable = [
        'name', 'email', 'password', 'slug', 'gender','pic'
    ];
    

我认为第二个比第一个好,而且您可以同时设置可为空的功能以及可填充的功能,而不会出现问题。

于 2018-03-23T12:08:53.397 回答
2

另外,我在使用 Laravel 时遇到了这个问题,但通过更改我的数据库模式以允许在我计划从单独的表单中收集信息的表上允许“空”输入来解决这个问题:

public function up()
{

    Schema::create('trip_table', function (Blueprint $table) {
        $table->increments('trip_id')->unsigned();
        $table->time('est_start');
        $table->time('est_end');
        $table->time('act_start')->nullable();
        $table->time('act_end')->nullable();
        $table->date('Trip_Date');
        $table->integer('Starting_Miles')->nullable();
        $table->integer('Ending_Miles')->nullable();
        $table->string('Bus_id')->nullable();
        $table->string('Event');
        $table->string('Desc')->nullable();
        $table->string('Destination');
        $table->string('Departure_location');
        $table->text('Drivers_Comment')->nullable();
        $table->string('Requester')->nullable();
        $table->integer('driver_id')->nullable();
        $table->timestamps();
    });

}

->nullable(); 补充到最后。这是使用 Laravel。希望这对某人有帮助,谢谢!

于 2018-01-22T06:55:44.200 回答
2

当我忘记在 Laravel 模型中的数组中添加新的表单字段/数据库列$fillable时出现此错误- 模型正在剥离它们。

于 2019-02-09T22:27:51.647 回答
0

我在使用 Lumen 时也遇到了这个问题,但通过 DB_STRICT_MODE=false.env文件中设置来解决。

于 2020-09-15T09:52:44.250 回答