我刚刚从MAMP安装切换到本机Apache,MySql和PHP安装。我已经完成了所有工作,但我已经开始在新环境中使用我的Web应用程序,并且突然出现任何INSERT命令导致以下错误:
SQLSTATE [HY000]:常规错误:1364字段'display_name'没有默认值
看来我现在无法将领域留空。我正在使用MySql版本5.6.13
有没有办法在MySql中更改此设置?
答案 0 :(得分:127)
MySQL最有可能处于STRICT模式。
尝试运行SET GLOBAL sql_mode=''
或修改my.cnf以确保您没有设置STRICT_ALL_TABLES
等。
答案 1 :(得分:17)
MySQL最有可能处于STRICT
模式,这不一定是坏事,因为你会尽早识别错误/问题,而不是盲目地认为一切都按预期工作。
将列更改为允许null:
ALTER TABLE `x` CHANGE `display_name` `display_name` TEXT NULL
或者,将其设为默认值为空字符串:
ALTER TABLE `x` CHANGE `display_name` `display_name` TEXT NOT NULL DEFAULT ''
答案 2 :(得分:6)
所有这些答案都是一个很好的方法,但我不认为你想要总是去你的数据库并修改你设置为 NULL 的默认值。
我建议你转到 app / User.php 并修改protected $fillable
,这样它就会占用用于注册的数据数组中的新字段。
我们假设您添加了一个名为"first_name"
的新输入字段,您的$fillable
应该是这样的:
protected $fillable = [ 'first_name', 'email', 'password',];
这对我有用。祝你好运!
答案 3 :(得分:2)
此外,我使用Laravel时遇到此问题,但通过更改我的数据库架构以允许在我计划从不同表单收集信息的表上允许“null”输入来修复:
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。希望这对某人有所帮助,谢谢!
答案 4 :(得分:2)
我也遇到了这个问题,有两种方法可以解决这个问题。
首先,您可以将默认值设置为 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。
第二个在您的模型中设置protected $fillable
字段中的输入字段。例如:
protected $fillable = [
'name', 'email', 'password', 'slug', 'gender','pic'
];
我认为第二个比第一个好,并且您可以同时设置可空功能以及可填写而没有问题。
答案 5 :(得分:0)
当我忘记向Laravel模型的$fillable
数组中添加新表单 fields / columns 时,出现了此错误;该模型正在将它们剥离。
答案 6 :(得分:0)
我也使用Lumen遇到了这个问题,但是通过在DB_STRICT_MODE=false
文件中设置.env
来解决。