为什么Oracle 9i将空字符串视为NULL?

为什么Oracle 9i将空字符串视为NULL?

我知道是吗?把‘当作NULL,但这并不能告诉我什么为什么情况就是这样。据我所理解的SQL规范,‘与NULL-一个是有效的数据,另一个是表示没有同样的信息。

你可以随意推测,但如果是这样的话,请说明一下。如果甲骨文有谁能对此发表评论的话,那就太棒了!


幕布斯7119047
浏览 835回答 3
3回答

绝地无双

我相信答案是甲骨文已经非常老了。早在SQL标准出现之前,Oracle就做出了一个设计决策,即在VARCHAR/VARCHAR2柱NULL而且只有一种意义上的NULL(有关系理论家将区分从未被提示的数据、存在答案但用户不知道的数据、没有答案的数据,等等)。所有这些都构成了NULL).当SQL标准出现并同意NULL空字符串是不同的实体,已经有一些Oracle用户的代码假定两者是等价的。因此,Oracle基本上可以选择破坏现有代码,违反SQL标准,或者引入某种初始化参数,从而改变潜在大量查询的功能。违反SQL标准(IMHO)是这三个选项中破坏性最小的。Oracle留下了一个可能性,即VARCHAR数据类型将在以后的版本中更改,以符合sql标准(这就是为什么每个人都使用VARCHAR2在Oracle中,由于该数据类型的行为可以保证保持不变,因此将继续进行)。

喵喵时光机

汤姆·凯特甲骨文副总裁:零长度varchar被视为NULL。“不被视为NULL。‘当分配给char(1)时变成’(char类型是空白填充字符串)。‘当分配给varchar2(1)时变成’,它是一个零长度字符串,而在Oracle中零长度字符串为NULL(它不是长的‘)

慕雪6442864

我怀疑,如果您把Oracle看作是早期开发人员可能做的事情-作为数据输入系统的光荣后端,那么这就更有意义了。数据库中的每个字段都对应于数据输入操作符在屏幕上看到的一个字段。如果运算符没有在字段中键入任何内容,无论是“生日”还是“地址”,那么该字段的数据都是“未知的”。运算符没有办法表明某人的地址实际上是空字符串,而且这一点也没有多大意义。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL
Oracle