当前位置: 首页 > 面试题库 >

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

龙成仁
2023-03-14
问题内容

我知道它 确实 将’|’视为NULL,但这并不能告诉我 为什么 会这样。据我了解的SQL规范,“
|”与NULL-是一个有效的数据,而另一个则表明缺少相同的信息。

随意推测,但请说明是否是这种情况。如果有Oracle的任何人可以对此发表评论,那就太好了!


问题答案:

我相信答案是甲骨文非常老。

早在SQL标准出现以前,Oracle就做出了以下设计决定:VARCHAR/VARCHAR2列中的空字符串是NULL并且只有一种NULL感觉(有一些关系理论家可以区分从未提示过的数据,存在答案但用户不知道的数据,没有答案的数据等,所有这些都构成某种意义上的NULL

到SQL标准问世并同意NULL并且空字符串是不同的实体时,已经有Oracle用户使用了假定两者相等的代码。因此,Oracle基本上可以选择破坏现有代码,违反SQL标准或引入某种初始化参数的选择,这些参数可能会更改潜在大量查询的功能。在这三个选项中,违反SQL标准(IMHO)的破坏最少。

Oracle保留了VARCHAR在将来的版本中更改数据类型以遵守SQL标准的可能性(这就是为什么每个人都VARCHAR2在Oracle中使用它的原因,因为该数据类型的行为可以保证将来保持不变)。



 类似资料:
  • 我使用gson序列化java对象到json。 这个生成器处理好的空值。但与此同时,我希望它处理空字符串也为空。 这怎么能做到呢?

  • 问题内容: Oracle Java Community网站上的一篇文章提供了以下方法作为示例(对于JPA Converter,但这并不相关): 将String y强制转换为String val有什么用?有正当的理由吗? 原始文章:JPA的新增功能 问题答案: 这样的转换是完全没有必要的。我可以想象那是以前 但是后来参数类型更改为,而作者只是忘了删除强制类型转换。

  • 问题内容: 我不明白为什么整数在串联中被视为字符串文字。例如 输出为:。 为什么不添加,为什么要添加? 问题答案: 该表达式从左到右求值。前两个操作数均为(10和30),因此第一个执行加法。 下一个获取操作数(40)和操作数(“ Sachin”),因此将其转换为并执行连接。 接下来的运算符获取一个操作数和一个操作数,并执行级联。 如果您想要不同的评估顺序,请使用括号: 这将输出。

  • 问题内容: 这让我感到很奇怪,我花了一段时间检查代码中的错误之后才发现这一点。 “将副本从数据库表或视图复制到文件。如果指定现有文件,则该文件将被覆盖。提取数据时,请注意bcp实用程序将空字符串表示为null,并将空字符串表示为空字符串。 ” (来自http://msdn.microsoft.com/en- us/library/ms162802.aspx ) 显然,这可以解决我的问题,但是有人可

  • 问题内容: 例如: 问题答案: 这是因为从索引0 in开始的长度为0的子字符串等于空字符串: 当然,任何字符串的长度为零的 每个 子字符串都等于空字符串。