你们如何使用 Oracle 处理空字符串?
语句#1:Oracle 在“varchar2”字段中将空字符串(例如'')视为NULL。
声明 #2:我们有一个定义抽象“表结构”的模型,其中我们有字段,不能为 NULL,但可以为“空”。该模型适用于各种 DBMS;几乎在所有地方,一切都很好,但不是 Oracle。您只是不能将空字符串插入“非空”字段。
声明#3:在我们的例子中不允许非空的默认值。
那么,有人会这么好心地告诉我 - 我们如何解决它?
这就是为什么我一直不明白 Oracle 为何如此受欢迎的原因。他们实际上并没有遵循 SQL 标准,这是基于他们多年前做出的一个愚蠢决定。
Oracle 9i SQL Reference 指出(这至少存在三个主要版本):
Oracle 当前将长度为零的字符值视为空值。但是,在未来的版本中,这可能不会继续存在,Oracle 建议您不要将空字符串视为与 null 相同。
但他们没有说你应该做什么。我发现解决此问题的唯一方法是:
我们是否可以说“在支持标准 SQL 行为之前不支持 Oracle”?在许多方面,这似乎是最不痛苦的方式。
如果您不能强制(使用)单个空格,或者可能是 Unicode 零宽度不间断空格 (U+FEFF),那么您可能必须全力以赴并使用诸如 32 Z 之类的不合理的东西来表示数据应该是空白的,但不是因为使用的 DBMS 是 Orrible。
Oracle中的空字符串和NULL是一回事。您希望允许空字符串但不允许 NULL。
您在表上放置了 NOT NULL 约束,这与非空字符串约束相同。如果你去掉那个约束,你会失去什么?