7

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

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

那么,有人会这么好心地告诉我 - 我们如何解决它?

4

3 回答 3

7

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

Oracle 9i SQL Reference 指出(这至少存在三个主要版本):

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

但他们没有说应该做什么。我发现解决此问题的唯一方法是:

  • 有一个不能出现在您的真实数据中的标记值来表示 NULL(例如,姓氏字段的“脱氧核糖核酸”,并希望电影明星不要开始给他们的孩子起奇怪的姓氏和奇怪的名字 :-)。
  • 有一个单独的字段来指示第一个字段是否有效,基本上是真实数据库对 NULL 所做的事情。
于 2009-03-28T04:41:20.970 回答
3

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

如果您不能强制(使用)单个空格,或者可能是 Unicode 零宽度不间断空格 (U+FEFF),那么您可能必须全力以赴并使用诸如 32 Z 之类的不合理的东西来表示数据应该是空白的,但不是因为使用的 DBMS 是 Orrible。

于 2009-03-28T05:27:06.897 回答
1

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

您在表上放置了 NOT NULL 约束,这与非空字符串约束相同。如果你去掉那个约束,你会失去什么?

于 2009-03-29T10:56:56.987 回答