Oracle空字符串

时间:2009-03-28 04:35:31

标签: oracle orm varchar2

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

声明#1 :Oracle在“varchar2”字段中将空字符串(例如'')视为NULL。
声明#2 :我们有一个定义抽象'表结构'的模型,我们有字段,不能为NULL,但可以是“空”。该模型适用于各种DBMS;几乎无处不在,一切都很好,但不是Oracle。您无法将空字符串插入“非空”字段 声明#3 :在我们的案例中不允许使用非空默认值。

那么,有人会如此友善地告诉我 - 我们如何解决它?

3 个答案:

答案 0 :(得分:7)

这就是为什么我从未理解为什么Oracle如此受欢迎。基于他们多年前做出的愚蠢决定,他们实际上并没有遵循SQL标准。

Oracle 9i SQL Reference声明(至少有三个主要版本):

  

Oracle目前将长度为零的字符值视为null。但是,在将来的版本中可能不会继续这样,Oracle建议您不要将空字符串视为空值。

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

  • 有一个哨兵值,在你的真实数据中不会出现以表示NULL(例如,对于一个姓氏字段的“脱氧核糖核酸”,并希望电影明星不会开始给他们的孩子奇怪的姓氏以及奇怪的名字: - )。
  • 有一个单独的字段来指示第一个字段是否有效,基本上是真正的数据库对NULL的作用。

答案 1 :(得分:3)

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

如果你不能强制(使用)一个空白,或者可能是一个Unicode零宽度不间断空间(U + FEFF),那么你可能不得不去整个生猪并使用一些难以置信的东西,如32 Z's表明数据应该是空白的,但不是因为使用的DBMS是可怕的。

答案 2 :(得分:1)

Oracle中的空字符串和NULL是一回事。您希望允许空字符串但不允许使用NULL。

您在表上放置了NOT NULL约束,这与not-an-empty-string约束相同。如果你删除了那个约束,那你输了什么?