MS Server和Oracle中对NULL处理的一些细节差异
程序员文章站
2023-12-06 08:14:04
insert into table (testcol) values(‘') 其中的testcol字段,其实在设计的时候,已经被设计为not null,但我们需要了解一点,...
insert into table (testcol) values(‘')
其中的testcol字段,其实在设计的时候,已经被设计为not null,但我们需要了解一点,在sql server中,null和空格是不同的,也就是说,上面的语句插入的是一个空,但并不是null,只有当我们的插入语句中没有该字段的时候,才会被认为违反非空的条件约束,这里可能用英文的表达可能会更加的准确一些,如果把null翻译成“空”的话,可能就会很容易搞混了。此外,如果我们的字段是int类型的话,如果我们插入空的话,会得到一个0,也就是说,ms sql server会自动帮我们处理对空格的转化。
但是在oracle中,这个便利便不存在咯,我们必须严格按照规则来进行插入,也就是说,我们再想视图通过插入空来满足not null的设计约束,已经不能成功啦,我们必须插入实实在在的内容才能符合not null的约束。
像类似地一些细节在我们设计既要满足ms sql,又要满足oracle的系统地时候,尤其会成为我们需要处理的家常便饭,这一方面要求我们要严格规范我们的sql脚本,再者也要对程序处理语句进行严格的条件控制才行,否则类似地问题在联调的时候会让我们陷入一个接着一个的噩梦~
其中的testcol字段,其实在设计的时候,已经被设计为not null,但我们需要了解一点,在sql server中,null和空格是不同的,也就是说,上面的语句插入的是一个空,但并不是null,只有当我们的插入语句中没有该字段的时候,才会被认为违反非空的条件约束,这里可能用英文的表达可能会更加的准确一些,如果把null翻译成“空”的话,可能就会很容易搞混了。此外,如果我们的字段是int类型的话,如果我们插入空的话,会得到一个0,也就是说,ms sql server会自动帮我们处理对空格的转化。
但是在oracle中,这个便利便不存在咯,我们必须严格按照规则来进行插入,也就是说,我们再想视图通过插入空来满足not null的设计约束,已经不能成功啦,我们必须插入实实在在的内容才能符合not null的约束。
像类似地一些细节在我们设计既要满足ms sql,又要满足oracle的系统地时候,尤其会成为我们需要处理的家常便饭,这一方面要求我们要严格规范我们的sql脚本,再者也要对程序处理语句进行严格的条件控制才行,否则类似地问题在联调的时候会让我们陷入一个接着一个的噩梦~