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"(比如出于法律原因),我有义务使用我的全名——如果我有一个(或多个),我必须包括我的中间名。所以这里有两个结果:
- 我没有中间名。结果是空白 - 我们知道答案,但什么都没有。
- 我有一个中间名。结果就是我的名字。
或者考虑注册一个网站。在注册之前,您不在他们的系统中。您的整个记录为空 - 它不存在。不过,注册后,您会得到 0
post 个计数。
所以现在你应该有足够的信息来回答你的问题了。
显然,因为该列被定义为 NOT NULL
,所以您不能将空值放在那里。所以系统必须默认为其他东西。由于包含任何数据(包括 space 字符 - 是的,有一个)会导致默认值很差,系统选择一个空字符串。由于空字符串是可接受的默认值,因此它也将是可接受的插入数据值。
我在 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"(比如出于法律原因),我有义务使用我的全名——如果我有一个(或多个),我必须包括我的中间名。所以这里有两个结果:
- 我没有中间名。结果是空白 - 我们知道答案,但什么都没有。
- 我有一个中间名。结果就是我的名字。
或者考虑注册一个网站。在注册之前,您不在他们的系统中。您的整个记录为空 - 它不存在。不过,注册后,您会得到 0
post 个计数。
所以现在你应该有足够的信息来回答你的问题了。
显然,因为该列被定义为
NOT NULL
,所以您不能将空值放在那里。所以系统必须默认为其他东西。由于包含任何数据(包括 space 字符 - 是的,有一个)会导致默认值很差,系统选择一个空字符串。由于空字符串是可接受的默认值,因此它也将是可接受的插入数据值。