我知道它 确实 将’|’视为NULL,但这并不能告诉我 为什么 会这样。据我了解的SQL规范,“ |”与NULL-是一个有效的数据,而另一个则表明缺少相同的信息。
NULL
随意推测,但请说明是否是这种情况。如果有Oracle的任何人可以对此发表评论,那就太好了!
我相信答案是甲骨文非常老。
早在SQL标准出现以前,Oracle就做出了以下设计决定:VARCHAR/VARCHAR2列中的空字符串是NULL并且只有一种NULL感觉(有一些关系理论家可以区分从未提示过的数据,存在答案但用户不知道的数据,没有答案的数据等,所有这些都构成某种意义上的NULL。
VARCHAR
VARCHAR2
到SQL标准问世并同意NULL并且空字符串是不同的实体时,已经有Oracle用户使用了假定两者相等的代码。因此,Oracle基本上可以选择破坏现有代码,违反SQL标准或引入某种初始化参数的选择,这些参数可能会更改潜在大量查询的功能。在这三个选项中,违反SQL标准(IMHO)的破坏最少。
Oracle保留了VARCHAR在将来的版本中更改数据类型以遵守SQL标准的可能性(这就是为什么每个人都VARCHAR2在Oracle中使用它的原因,因为该数据类型的行为可以保证将来保持不变)。