数据库字符串字段类型:它应该可以为空吗?

时间:2012-01-26 23:31:41

标签: asp.net sql-server database

我有几个表包含几个字段的字符串。其中一些字段可能包含也可能不包含数据。如果我创建一个记录创建时字符串字段为空的记录,当我对该记录执行读取查询时,它是否会成为问题,因为该字段为空或查询是否返回空字符串? 什么是基于考虑?非nullabe字符串或可空字符串,何时知道差异?

感谢您的建议。

3 个答案:

答案 0 :(得分:1)

如果数据库中存储了该字符串,则该查询将返回一个空字符串;如果该字符串是一个可为空的字符串,则返回一个空值(System.DBNull)。

但是,决定应该基于您建模的数据,而不是查询的功能。

数据库中的空值通常表示值未知或留空。这可以与空字符串区别开来,可以用来表示没有值。

以MiddleName字段为例。您可能想要区分没有中间名的人(空字符串)和尚未输入的人(空)。在这种情况下,您需要一个可以为空的字符串字段。

答案 1 :(得分:1)

这已经一次又一次地争论了数百万次。在我看来,NULL值是有原因的,你应该远离“魔法”值(即使空字符串意味着什么,不是吗)。

在读取时,NULL值不会转换为任何内容。你会得到null。您应该将其解释为“此值尚未设置”,并以此方式对待它。如果你用任何魔法值(例如空字符串)替换它,你只是在寻找麻烦,因为这个神奇的价值迟早会开始具有别的含义,你将不知道如何区别它们从未设定过。

换句话说,如果您认为某个属性是可选,那么它肯定是可以为空的候选者。每当你开始与自己辩论时,请记住“可选”这个词,我相信你会做出一个好的决定。

答案 2 :(得分:1)

数据库管理员的堆栈交换站点上有similar question。他们几乎回应了这里所说的内容。

没有提到的一件事是,如果您尝试将空值乘以实数值,则会得到null结果。许多其他操作也是如此。