关于SQL Server中的空/空数据库字段

时间:2012-12-10 18:59:29

标签: sql-server database

我很困惑,关于,空,空和非空数据库字段值。 我有一个选项卡,其中有几个字段包含空/空数据,其中一些包含NULL数据,并包含实际数据。 我很困惑Epmyt / Blank和Null数据之间的区别。

请帮帮我。

由于 Ravik

3 个答案:

答案 0 :(得分:1)

空或空白通常是指空字符串值,长度= 0个字符。 Null意味着没有价值,甚至不是空的。

答案 1 :(得分:0)

NULL是一个数据库指示符,指定数据库中的值丢失或不确定。空字符串是零长度varchar字符串。

选择值时,它们可能相同也可能不同。例如,SQL Server Management Studio将NULL值导出为“NULL”而不是空字符串。

NULL遵循一些非常基本的比较规则,许多人发现违反直觉。任何比较操作 - is null除外 - 都返回false。特别是,以下两个返回false:

where NULL = NULL
where NULL <> NULL

这适用于具有NULL值的列所以当val包含NULL值时,这些都返回false:

where val = val
where val <> val

空格/空字符串只是长度为0的可变长度字符串的值,通常表示为''。以下内容确实返回:

where '' = ''
where val = val                  -- given that val is ''

一个复杂因素是某些数据库将NULL值视为零长度字符串。想到了Oracle。但是,这不符合ANSI标准。

答案 2 :(得分:0)

NULL与NULL中的空值不同,您不确定该值是否为空。这对您的数据库有实际可衡量的影响。以下是一些例子:

  • 空varchar字段的LEN()为0. NULL字段的LEN()仍为NULL ...您不知道该字段有多大。

  • 与自己('' = '')相比较的两个空字段为真。您不知道两个NULL字段是否相等,因此(NULL = NULL)会导致NULL。

  • 空字段的COALESCE('', ... )会产生空字段。 NULL字段的COALESCE(NULL, ... )会转到下一个值。

还有更多这样的例子。 NULL 表示空。 NULL表示“我不知道。”