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

发布时间:2020-07-24 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了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 – 使用sqllite的Laravel迁移’无法添加一个NOT NULL列,默认值为NULL’全部内容,希望文章能够帮你解决sqlite – 使用sqllite的Laravel迁移’无法添加一个NOT NULL列,默认值为NULL’所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入脚本之家官方QQ群:1065694478
脚本之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!