DB2中NOT NULL VARCHAR的缺省值

时间:2016-02-23 10:45:48

标签: sql db2

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

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

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

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

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

DB Data

1 个答案:

答案 0 :(得分:1)

空字符串是而不是 null(好吧,除了在甲骨文上,但人们讨厌它)。通常在数据库中,null用于表示"我们不知道(尚未)",而空是"不存在"。

考虑中间名。美国(和其他国家)的许多人都有中间名(不是你的名字,而不是你的姓) 如果你(随便)问我的姓名,我只回复姓名(可能在我的情况下,或者你可能只得到我的名字!),你对我的中间名有什么了解?没有。你不知道我有没有。这是空的 - 你不知道我是否有一个,如果有的话,它是什么。 但如果你问我"官方" (出于法律原因),我有义务使用我的全名 - 如果我有一个(或更多),我必须包括我的中间名。所以这里有两个结果:

  1. 我没有中间名。结果是空白的 - 我们知道答案,而且没什么。
  2. 我有一个中间名。结果就是我的名字。
  3. 或考虑注册网站。在注册之前,您不在他们的系统中。你的整个记录​​都是空的 - 它不存在。注册后,您会获得0个帖子。

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