通常会在列上允许NULL
值,以允许表示值的缺失。使用NVARCHAR
时,可能会有一个空字符串,而不会将列设置为NULL
。在大多数情况下,我看不到具有空字符串的NVARCHAR
与此类列的NULL
值之间的语义差异。
将列设置为NOT NULL
使我免于处理代码中NULL
值的可能性,并且不必对“无值”的不同表示感觉更好({{1或者一个空字符串)。
通过将NULL
列设置为NVARCHAR
,我是否会遇到任何其他问题。性能?存储大小?我在客户端代码中使用值时忽略了什么?
答案 0 :(得分:3)
NULL
表示列中的值缺失/不适用。空字符串不同,因为它是实际值。从技术上讲,NULL
没有数据类型,在这种情况下,空字符串是nvarchar。
我无法看到使用默认值而不是NULL
值的任何问题。
事实上,它可能会有所帮助,因为您不必担心在任何查询中为NULL
值提供服务
e.g
Select Sum(TotalPrice) as 'TotalPrice' From myTable Where CountOfItems > 10
比
容易得多Select Sum(IsNull(TotalPrice,0)) as 'TotalPrice' From myTable Where IsNull(CountOfItems,0) > 10
您应该在DDL中使用默认约束,以确保数据中不会出现恶意NULL
。
答案 1 :(得分:3)
NULL值的概念是混淆的常见原因。 NULL 不与空字符串相同,或者值为零。
从概念上讲,NULL表示“缺少未知值”,并且与其他值的处理方式略有不同。例如,要测试NULL,您不能使用算术比较运算符,例如=,<或<>。
如果您的列可能包含“缺少未知值”,则必须将它们设置为接受NULL。另一方面,空字符串仅表示值已知,但为空。
例如:如果“Users”表中的“Middle Name”字段设置为NULL,则表示该用户的中间名称未知。用户可能有也可能没有中间名。但是,如果“中间名”字段设置为空字符串,则表示该用户已知没有中间名。
答案 2 :(得分:0)
如果有什么我会说如果你不允许NULL会更容易使用表,因为你不必在代码中的任何地方检查NULL,所以我只设置一个列到如果我需要处理未知值而不是空值,则允许NULL。
答案 3 :(得分:0)
ho1说的是什么。但是你不明智地定义一个NOT NULL列,然后为'Unknown'设置一个特殊值。