我很困惑,关于 Empty、Null 和非 Null 数据库字段值。我有一个选项卡,其中有几个字段包含空/空白数据,其中一些包含 NULL 数据,并包含实际数据。我很困惑Epmyt/Blank和Null数据之间的区别。
请帮我。
谢谢拉维克
我很困惑,关于 Empty、Null 和非 Null 数据库字段值。我有一个选项卡,其中有几个字段包含空/空白数据,其中一些包含 NULL 数据,并包含实际数据。我很困惑Epmyt/Blank和Null数据之间的区别。
请帮我。
谢谢拉维克
空或空白通常是指空字符串值,长度=0 个字符。Null 意味着没有价值,甚至不是空的。
NULL 是一个数据库指示符,它指定数据库中的值缺失或不确定。空字符串是长度为零的 varchar 字符串。
当您选择值时,它们可能相同也可能不同。例如,SQL Server Management Studio 将 NULL 值导出为“NULL”而不是空白字符串。
NULL 遵循一些非常基本的比较规则,许多人认为这些规则违反直觉。任何比较操作——除了is null
——返回假。特别是,以下两个返回 false:
where NULL = NULL
where NULL <> NULL
这也适用于具有 NULL 值的列因此,当val
包含 NULL 值时,它们都返回 false:
where val = val
where val <> val
空白/空字符串只是长度为 0 的可变长度字符串的值,通常表示为 ''。以下确实返回 true:
where '' = ''
where val = val -- given that val is ''
一个复杂的问题是某些数据库将 NULL 值视为零长度字符串。甲骨文浮现在脑海中。但是,这不是符合 ANSI 的行为。
NULL 与空值的不同之处在于 NULL,您不确定该值是否为空。这对您的数据库有真正可衡量的影响。这里有些例子:
LEN()
一个空的 varchar 字段的值为 0。一个LEN()
NULL 字段的值仍然是 NULL……你不知道这个字段有多大。
与它们自身 ( ) 相比的两个空字段'' = ''
为真。您不知道两个 NULL 字段是否相等,因此 ( NULL = NULL
) 会导致 NULL。
COALESCE('', ... )
空字段的结果为空字段。NULL 字段的COALESCE(NULL, ... )
下降到下一个值。
这样的例子还有很多。NULL 并不意味着空。NULL 表示“我不知道”。