The*_*ler 4 sql database oracle
我正在尝试在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")
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
Gor*_*off 10
在Oracle中,空字符串相当于NULL.
在几乎任何其他数据库中,两者都不同,但这就是Oracle如何定义NULL字符串的值(默认情况下).
这在文档中有解释,并附有这个诱人的注释:
注意:
Oracle数据库当前将长度为零的字符值视为null.但是,在将来的版本中,这可能不会继续存在,Oracle建议您不要将空字符串视为与空值相同.
突出显示的部分是我的.我不确定你应该如何遵循这个建议.我认为这意味着NULL明确使用,而不是''在您打算使用时NULL.
请注意,在SQL中,NULL表示未知值,而不是空值.没有字符的字符串(完全有效的字符串)与NULL未知的值之间存在很大差异.在实践中,NULL通常用于遗漏,但这更像是一种约定而不是定义.