【问题标题】:Adding a NOT NULL Column to an Existing Table in Laravel SQLite在 Laravel SQLite 中向现有表添加 NOT NULL 列
【发布时间】:2020-06-17 08:28:52
【问题描述】:

我正在尝试向现有表添加外键:

public function up()
{
    Schema::table('employee', function (Blueprint $table) {
        $table->uuid("agency_id");
    }
}

SQLite 抛出错误:

一般错误:1 无法添加默认值为 NULL 的 NOT NULL 列(SQL:alter table "employees" add column "agency_id" varchar not null)

我无法添加空字符串的默认值,因为类型是 UUID。我能做些什么?

【问题讨论】:

  • 如果你让它不为空,你应该有某种值可以插入,否则让它可以为空。

标签: laravel sqlite


【解决方案1】:

SQLite 通常会选择 NULL,但您已指定它不能为 NULL,那么它应该是什么?它没有办法知道。

从头开始添加表时,可以指定NOT NULL。但是,添加列时不能这样做。 SQLite 的规范说你必须为此设置一个默认值。 您可以指定默认值,例如:

public function up()
{
    Schema::table('employee', function (Blueprint $table) {
        $table->uuid("agency_id")->nullable();
    }
}

【讨论】:

  • 0 不是 uuid 吗?它会在那里失败。
  • $table->uuid("agency_id")->nullable(); 怎么样?
  • 但它是我们数据结构的必填字段。允许为空不是解决办法。
  • @f7n 如果你不希望列是 nullable - 那么你需要让 Laravel 知道默认应该是什么。喜欢:default('');
猜你喜欢
  • 2017-02-16
  • 2014-08-22
  • 2014-01-16
  • 2013-05-23
  • 1970-01-01
  • 2011-03-30
  • 2018-08-14
  • 2017-09-04
相关资源
最近更新 更多