小编01t*_*lav的帖子

添加带有空字符串的列作为默认值而不是null约束会导致oracle数据库的行为不一致

执行此sql后,我无法理解oracle数据库中会发生什么:

CREATE TABLE EMPTYSTRING
( 
COLUMNA VARCHAR2(1)
);

INSERT INTO EMPTYSTRING (COLUMNA) VALUES('X');

ALTER TABLE EMPTYSTRING ADD
(
COLUMNB VARCHAR2(1) DEFAULT '' NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

在我读到的文章中,oracle将空字符串视为null。但是,为什么要添加一个具有默认“空”值和一个约束的列,该约束说值不能为空合法值呢?

更重要的是,由于这是合法的,因此如何内部处理?如果我们尝试

SELECT * FROM EMPTYSTRING WHERE COLUMNB='';
SELECT * FROM EMPTYSTRING WHERE COLUMNB IS NULL;
Run Code Online (Sandbox Code Playgroud)

我们没有结果。另一方面,如果我们尝试

SELECT * FROM EMPTYSTRING;
SELECT * FROM EMPTYSTRING WHERE TRIM(COLUMNB) IS NULL;
Run Code Online (Sandbox Code Playgroud)

我们得到:

COLUMNA COLUMNB
------- -------
X               
Run Code Online (Sandbox Code Playgroud)

那么,真正写在数据库中的是什么?为什么会这样呢?

如果我们尝试插入一行而未为COLUMNB指定值

INSERT INTO EMPTYSTRING (COLUMNA) VALUES('Y');
Run Code Online (Sandbox Code Playgroud)

我们会收到“无法插入NULL”错误,因此默认情况下,除非添加COLUMNB之前表中的行,否则默认为空字符串实际上不起作用。

string oracle null default-value

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

default-value ×1

null ×1

oracle ×1

string ×1