将 NULL 值写入 DML 和使用默认值的 NULL 之间有什么区别。写 NULL 值是一种不好的做法吗?何时决定采用哪种方法。
2 回答
NULL 将存储一个字节标志以及数据,因为 Null('') 不存储一个字节标志,此外,字段中的任何空白值都将被视为 Null,即它具有“”作为默认值并将其视为 null。因此,将 null 与默认值一起使用是一种很好的做法。
Sarveshmishra 是正确的。要回答您问题的另一部分 - 这是否是好的做法取决于您如何使用记录格式。
作为字节标志的 NULL 主要是用于在 Ab Initio 中使用的 NULL 的明确表示(即没有与实际数据发生冲突的风险),其代价是额外的记录宽度。
适用于:当图形内部和图形之间需要严格正确的 null 处理时(以及当记录宽度和转换(重新格式化)成本可以接受时)
不利于:与源和目标系统进行基于文件的数据交换。(请注意,通过批量加载程序(例如 SQL Server bcp)的数据库输出是基于文件的。)
NULL(默认)将 NULL 编码为特定的字符序列(或零宽度字符串)。选择的编码必须与上游/下游的接口契约匹配,否则存在数据冲突的风险(例如:在数据库中,"" <> NULL,但 NULL("") 将 "" 视为 NULL)。
适用于:上游/下游的数据交换,或者“”和 NULL 之间的区别并不重要。
不利于:保证严格的空值处理。
对于具有严格空处理和零冲突风险的数据交换,另一种策略是在接口合同中定义显式空标志。