为什么在使用sqlLITE驱动程序时收到此警告?我没有
MySQL驱动程序的问题,但是sqlLITE抛出了这个错误.
这对我来说没有意义,因为我理解种子在所有的迁移完成后发生,所以为什么它抱怨这个问题,只有数据已经存在于数据库中才会出现.
我的两个迁移是
第一次移民
public function up() { Schema::create('users',function($table) { $table->increments('id'); $table->string('username'); $table->string('email'); $table->string('password'); }); }
第二次移民
public function up() { Schema::table('users',function(Blueprint $table) { $table->date('birthday')->after('id'); $table->string('last_name')->after('id'); $table->string('first_name')->after('id'); }); }
Exception: sqlSTATE[HY000]: General error: 1 Cannot add a NOT NULL column with default value NULL (sql: alter table "users" add column "birthday" date not null)
看起来这是一个sqlite的奇怪.根据
Laracast forum thread about the same issue:
When adding a table from scratch,you can specify NOT NULL. However,you can’t do this when adding a column. sqlite’s specification says you have to have a default for this,which is a poor choice.
进一步看看SQLite
ALTER TABLE
docs,我发现:If a NOT NULL constraint is specified,then the column must have a default value other than NULL.
我认为在sqlite的世界里,不提供一个默认值就是说默认值应该是NULL(而不是这个不可空的列没有默认值,所以必须为它提供一个值)在每个插入).