(NOT)NVARCHAR列的NULL

And*_*bel 6 sql

NULL通常允许在列上允许值以允许表示值的缺失.在使用时NVARCHAR,已经有可能有一个空字符串,而不设置列NULL.在大多数情况下,我看不到NVARCHAR空字符串和NULL这样一列的值之间的语义差异.

设置列使NOT NULL我不必处理NULL代码中值的可能性,并且不必对"无值"(NULL或空字符串)的不同表示感觉更好.

我将NVARCHAR列设置为是否会遇到任何其他问题NOT NULL.性能?存储大小?我在客户端代码中使用值时忽略了什么?

cod*_*ger 3

ANULL表示该列中的值缺失/不适用。空白字符串是不同的,因为它是实际值。从技术上讲,ANULL没有数据类型,在本例中,A 为空白字符串,即 nvarchar。

我看不出使用默认值而不是NULL值有任何问题。

事实上,这可能是有益的,因为您不必担心满足NULL任何查询中的值

例如

Select Sum(TotalPrice) as 'TotalPrice' From myTable Where CountOfItems > 10
Run Code Online (Sandbox Code Playgroud)

Select Sum(IsNull(TotalPrice,0)) as 'TotalPrice' From myTable Where IsNull(CountOfItems,0) > 10
Run Code Online (Sandbox Code Playgroud)

您应该在 DDL 中使用默认约束,以确保NULL数据中不会出现恶意行为。

  • -1 如果“TotalPrice”为“NULL”,则无论如何它都不会包含在聚合中。如果“CountOfItems”为“NULL”,那么它无论如何都不会匹配谓词“>10”,因此这两个都是多余的,而第二个只是使表达式不可控制。另外,如果您使用“AVG”而不是“SUM”怎么办?现在您的虚拟值将使结果不正确。 (3认同)