代码之家  ›  专栏  ›  技术社区  ›  Anders Abel

(非)nvarchar列为空

sql
  •  6
  • Anders Abel  · 技术社区  · 15 年前

    允许 NULL 列上的值通常是允许表示值的缺失。使用时 NVARCHAR AldReady有可能有一个空字符串,而不将列设置为 无效的 . 在大多数情况下,我看不到 纳瓦卡尔 带空字符串和 无效的 该列的值。

    将列设置为 NOT NULL 避免了我不得不面对 无效的 代码中的值,最好不要用不同的“无值”表示( 无效的 或空字符串)。

    我会通过设置我的 纳瓦卡尔 列到 非空 . 性能?存储大小?对于客户机代码中的值的使用,我忽略了什么?

    4 回复  |  直到 15 年前
        1
  •  3
  •   codingbadger    15 年前

    NULL 指示列中的值丢失/不适用。空字符串是不同的,因为它是一个实际值。一 无效的 技术上没有数据类型,在这种情况下,空字符串是nvarchar。

    我看不到有默认值的问题,而不是 无效的 价值观。

    事实上,这可能是有益的,因为你不必担心为 无效的 任何查询中的值

    例如

    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中使用默认约束,以确保没有恶意 无效的 的出现在您的数据中。

        2
  •  3
  •   Daniel Vassallo    15 年前

    空值的概念是一个常见的混淆源。零是 与空字符串或零值相同。

    从概念上讲,空意味着“一个缺少的未知值”,它的处理方式与其他值有些不同。例如,要测试空值,不能使用算术比较运算符,如=、<或<gt;。

    如果有可能包含“缺少未知值”的列,则必须将其设置为接受空值。另一方面,空字符串只意味着 是已知的 是空的。

    例如:如果“用户”表中的“中间名”字段设置为空,则表示该用户的中间名未知。用户可能有中间名,也可能没有中间名。但是,如果“中间名”字段设置为空字符串,则这意味着用户已知没有中间名。

        3
  •  0
  •   Hans Olsson    15 年前

    如果我想说,如果不允许空值,使用表会更容易,因为在代码中不必到处检查空值,所以我只在需要处理未知值而不是空值时将列设置为允许空值。

        4
  •  0
  •   Brian Hooper    15 年前

    HO1说。但是不建议您定义一个不为空的列,然后为“unknown”指定一个特殊值。