DML中NULL和NULL("")的区别

Difference between NULL and NULL("") in DML

将NULL值写入DML和使用默认值的NULL有什么区别。写 NULL 值是一种不好的做法吗?何时决定采用哪种方法。

NULL 将存储一个字节的标志以及数据,因为 Null('') 不存储一个字节的标志,此外字段中的任何空白值都将被视为 Null,即它具有 "" 作为默认值并对待这个等于空。因此,最好将 null 与默认值一起使用。

Sarveshmishra 是正确的。回答你问题的另一部分 - 这是否是好的做法取决于你如何使用记录格式。


NULL 作为字节标志 主要是在 Ab Initio 中使用 NULL 的明确(即没有与真实数据发生冲突的风险)表示,其代价是额外的记录宽度.

适用于:当图表内部和图表之间需要严格正确的空值处理时(以及当记录宽度和转换(重新格式化)成本可以接受时)

不适合:与源系统和目标系统进行基于文件的数据交换。 (请注意,通过批量加载程序(例如 SQL Server bcp)的数据库输出是基于文件的。)


NULL(默认) 将 NULL 编码为特定字符序列(或零宽度字符串)。选择的编码必须与upstream/downstream的接口约定相匹配,否则有数据冲突的风险(例如:在数据库中,"" <> NULL,但NULL("") 将"​​" 视为NULL)。

适用于:数据交换upstream/downstream,或者“”和 NULL 之间的区别并不重要。

不适合:保证严格的空值处理。


对于具有严格空值处理和零冲突风险的数据交换,另一种策略是在接口协定中定义明确的空值标志。