SQL Server 2008 - 默认列值 - 我应该使用 null 还是空字符串?

标签 sql sql-server null string

有一段时间,我一直在争论是否应该保留我不知道数据是否会传入的列,并将值设置为空字符串 ('') 还是只允许 null。

我想听听这里推荐的做法是什么。

如果有什么不同,我将使用 C# 作为消费应用程序。

最佳答案

恐怕...

这取决于!

这个问题没有单一的答案。

正如其他回复中所指出的,在 SQL 级别NULL 和空字符串具有非常不同的语义,前者表示该值未知,后者表示该值未知该值是“看不见的东西”(在显示和报告中),但它仍然是“已知值”。在这种情况下,常见的一个例子是中间名。 “middle_name”列中的空值表示我们不知道底层人是否有中间名,如果有的话,这个名字是什么,空字符串表示我们“知道”这个人< em>没有有中间名。

也就是说,对于给定的列,另外两种因素可能会帮助您在这些选项之间进行选择。

  • 应用程序级别的底层数据的语义。
  • SQL 处理空值方式的一些注意事项

数据语义
例如,了解空字符串是否是基础数据的有效值非常重要。如果是这种情况,如果我们还使用空字符串表示“未知信息”,则可能会丢失信息。另一个考虑因素是,当我们没有该列的信息时,是否可以使用某些替代值;也许“n/a”或“未指定”或“tbd”是更好的值。

SQL 行为和实用程序
考虑到 SQL 行为,使用或不使用 NULL 的选择可能是由空间考虑、创建过滤索引的愿望或 COALESCE() 函数的便利性(可以用 CASE 语句模拟,但以更详细的方式)。另一个考虑因素是任何查询是否可能尝试查询多个列以附加它们(如 SELECT name + ', ' + middle_name AS LongName 等)。

除了 NULL 与空字符串选择的有效性之外,在给定情况下,一般考虑尝试并尽可能保持一致,即尝试并坚持一种特定方式,并且仅/有意/明确在少数情况下,出于充分的理由偏离这种方式。

关于SQL Server 2008 - 默认列值 - 我应该使用 null 还是空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2189710/

相关文章:

php - 附加位置字段

sql - Amazon Athena 返回 "mismatched input ' partitioned' expecting {, 'with' }"创建分区时出错

sql-server - INSERT 语句与 FOREIGN KEY 约束冲突

sql - 如何根据阈值删除除部分记录之外的所有记录?

mysql - 如何隐藏sql中为空的和值?

mysql - 连接三张表

sql - 两张 table 还是一张 table ?

c++ - 使用 SQLAPI 从 C++ 控制台应用程序连接到 SQLServer 数据库

mysql - 如何将 MySQL 5.7 JSON NULL 转换为 native MySQL NULL?

scala - 检查 arraytype 列是否包含 null