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