我试图在Oracle中的非空列中插入空字符串,但失败了。下面是这个案例:
create table trademark (
name varchar2(100) not null
);
insert into trademark (name) values ('Kodak');
insert into trademark (name) values (' '); -- one space
insert into trademark (name) values (''); -- empty string
Error: ORA-01400: cannot insert NULL into ("USER1"."TRADEMARK"."NAME")我做错了什么?
发布于 2018-04-06 01:27:04
在Oracle中,空字符串等效于NULL。
在几乎所有其他数据库中,这两个数据库是不同的,但这就是Oracle为字符串定义NULL值的方式(默认情况下)。
在documentation中解释了这一点,以及这条诱人的注释:
备注:
Oracle数据库当前将长度为零的字符值视为null。但是,在将来的版本中,这种情况可能不会继续存在,Oracle建议您不要将空字符串视为nulls。
突出显示的部分是我的。我不确定你应该如何遵循这个建议。我认为这意味着当您打算使用''时,显式地使用NULL,而不是NULL。
请注意,在SQL中,NULL表示未知值,而不是空值。没有字符的字符串(完全有效的字符串)和未知的NULL值之间有很大的区别。实际上,NULL通常用来表示缺失,但这更像是一种约定,而不是一种定义。
https://stackoverflow.com/questions/49678159
复制相似问题