DB2 中 NOT NULL VARCHAR 的默认值

Default Value for NOT NULL VARCHAR in DB2

我在 DB2 中有一个 RDBMS table,其中列定义为 "ARMTST" VARCHAR(10) NOT NULL DEFAULT

我正在检查 table 上的数据并看到此列中没有值的行(通过 Toad Viewer)但是当我 运行 这个查询时,SELECT COUNT ( * ) FROM ACTIVITY WHERE ARMTST IS NULL; 我得到结果为 zero rows

附件是 SELECT ARMTST FROM ACTIVITY ; 的屏幕截图,其中显示了某些行的空列值。

即使在 UI 中如此显示,这些列是否不是空的? CREATE TABLE 脚本中未指定默认值。

我认为该代码无法插入空值。

空字符串是 not null(好吧,Oracle 除外,但人们因此讨厌它们)。在数据库中经常用null来表示"we don't know (yet)",而空就是"not present".

考虑中间名。美国(和其他国家/地区)的许多人都有中间名(不是您的名字,也不是您的姓氏)。
如果你(随便)问我的名字,而我只回答名字和姓氏(在我的情况下,很可能,或者你可能只知道我的名字!),你知道我的中间名吗?没有什么。你不知道我有没有。这是空的——你不知道我是否有,如果有,它是什么。 但是如果你问我 "officially"(比如出于法律原因),我有义务使用我的全名——如果我有一个(或多个),我必须包括我的中间名。所以这里有两个结果:

  1. 我没有中间名。结果是空白 - 我们知道答案,但什么都没有。
  2. 我有一个中间名。结果就是我的名字。

或者考虑注册一个网站。在注册之前,您不在他们的系统中。您的整个记录​​为空 - 它不存在。不过,注册后,您会得到 0 post 个计数。


所以现在你应该有足够的信息来回答你的问题了。
显然,因为该列被定义为 NOT NULL,所以您不能将空值放在那里。所以系统必须默认为其他东西。由于包含任何数据(包括 space 字符 - 是的,有一个)会导致默认值很差,系统选择一个空字符串。由于空字符串是可接受的默认值,因此它也将是可接受的插入数据值。