在向数据库插入行时,使用默认值(如空字符串)是否会有任何影响?使用null的问题在于在应用程序中使用数据时必须进行检查,而默认值可以更容易地处理。
在向数据库插入行时,使用默认值(如空字符串)是否会有任何影响?使用null的问题在于在应用程序中使用数据时必须进行检查,而默认值可以更容易地处理。
在数据库中,NULL的含义应该保留为“未知”,而不是空。因此,只要您使用的默认值反映了基础数据的性质(即它不是“未知”),我实际上建议使用默认值。
然而,这也取决于您的应用程序。如果它以不同的方式处理未知值,那么请按照该方式操作 :)
我不同意使用默认值。null的目的是显示您没有信息。空字符串并不意味着这一点,它是一个值。此外,如果您开始禁止字符串中的null,则需要考虑其他数据类型。数字和日期很难具有表示“我没有此字段的值”的值。如果您错误地将数字或日期存储在varchar字段中,那么在需要将它们转换为日期或数字等效项以执行数学处理时,用空字符串而不是null可能导致查询不起作用(不建议将日期和数字数据存储为字符串,只是认识到您可能已经拥有一些,并且这种方案可能会导致查询它们时出现问题)。如果除了这些字段之外,您不允许使用null,则在查询这些字段时会犯很多错误,因为您不习惯检查null,并且更容易忘记这样做。您还可以导致新的查询问题。请考虑:
select count(myfield), myfield2 from mytable group by myfield2
如果你不知道某个值,使用null或空字符串来存储会产生不同的结果。
我相信你会遇到的主要错误是逻辑错误。
字符串很容易处理,但整数不同。考虑一个工资列,如果默认值为0,则可能表示与NULL有所不同。NULL意味着员工未经过薪资支付,而0表示他仍需出于某种原因进行处理。
在外键上也可以使用NULL,但在FK上设置默认值似乎不是一个好主意。
我相信这是一种偏好和数据库用途的问题,虽然我不是很熟悉 SQL Server 数据库存储数据的方式,但我认为这将会产生很少实际差异。因为我曾经使用过 Null 条目和默认字符串作为区分的方法,并没有发现太大的差异。
将 nullability 添加到列确实会增加更多的存储开销。每八个可空列都会创建一个 null 位图。例如,从第一个到第八个可空列会为行添加一个额外的字节,从第九个到第十六个则会再添加一个字节,以此类推,每行总共会增加两个额外的字节。
检查 NULL 和空字符串('')是不同的,因为您需要检查 COLUMN IS NULL OR COLUMN = ''。即使 COLUMN 是 NULL,COLUMN = NULL 的比较也不起作用,因为 NULL 不等于 NULL,因此需要使用 IS NULL 运算符。
此外,将 NULL 与其他数据连接或聚合会导致严重问题,因为任何与 NULL 连接的内容都将导致 NULL。聚合将忽略 NULL 并发出警告,但这可能不是您希望在平均值中看到的行为。
我的建议是坚持使用非空列,并在需要最小化存储并且不想在代码中检查 NULL 的情况下使用空字符串作为占位符。我并不是说这适用于每种情况,可以为 nullability 提出论点,但这种方法保持简单。
决定权在你手中,大多数情况下,这取决于应用程序行为和业务需求。
默认列通常在以下情况下使用: