sqlite – 使用sqllite的Laravel迁移’无法添加一个NOT NULL列,默认值为NULL’

前端之家收集整理的这篇文章主要介绍了sqlite – 使用sqllite的Laravel迁移’无法添加一个NOT NULL列,默认值为NULL’前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么在使用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(而不是这个不可空的列没有默认值,所以必须为它提供一个值)在每个插入).

如果您需要向现有表添加不可空列,那么sqlite会让您处于不良状态,哪个列也不应该具有默认值.

猜你在找的Sqlite相关文章