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