代码之家  ›  专栏  ›  技术社区  ›  Vugluskr

Oracle空字符串

  •  7
  • Vugluskr  · 技术社区  · 16 年前

    你们如何用Oracle处理空字符串?

    :Oracle将“varchar2”字段中的空字符串(例如“.”)视为NULL。
    :我们有一个定义抽象“表结构”的模型,其中有字段 不能 为空,但 可以 是“空的”。该模型适用于各种数据库管理系统;几乎在所有地方,一切都很好,但甲骨文却不行。您不能将空字符串插入到“notnull”字段中。

    3 回复  |  直到 16 年前
        1
  •  7
  •   paxdiablo    16 年前

    这就是为什么我一直不明白为什么甲骨文如此受欢迎。他们实际上并不遵循SQL标准,这是基于他们多年前做出的一个愚蠢的决定。

    Oracle 9i SQL参考说明(至少有三个主要版本有此说明):

    Oracle当前将长度为零的字符值视为null。但是,在将来的版本中可能不再如此,Oracle建议您不要将空字符串视为空字符串。

    但他们没有说 什么 你应该这样做。我找到的唯一解决这个问题的方法是:

    • 有一个在真实数据中不能出现的哨兵值来表示NULL(例如,“脱氧核糖核酸”表示姓氏字段,希望电影明星不要给他们的孩子起奇怪的姓氏和名字:-)。
    • 有一个单独的字段来指示第一个字段是否有效,这基本上是一个真正的数据库对null的处理方式。
        2
  •  3
  •   Jonathan Leffler    16 年前

    我们是否可以说“在Oracle支持标准SQL行为之前不支持它”?在许多方面,这似乎是最不痛苦的方式。

    如果您不能强制(使用)一个空格,或者可能是Unicode零宽度非中断空格(U+FEFF),那么您可能必须全力以赴,使用一些不可信的东西,例如32 Z来表示数据应该是空白的,但不是因为使用的DBMS是错误的。

        3
  •  1
  •   WW.    16 年前

    您已经在表上放置了NOTNULL约束,这与NOT空字符串约束相同。如果你取消了这个限制,你会失去什么?