当我在数据库表列中插入一个空字符串时,它看起来像是在内部存储为NULL
。那么为什么我不能通过查找那个空字符串来选择相应的行呢?
示例:
insert into mytable (mycolumn,col2,col3) values ('','xyz','abc');
// now there is a row having mycolumn == NULL
select * from mytable where mycolumn='';
// empty :(
我该怎么办?
答案 0 :(得分:4)
这是Oracle中一种奇怪的时代错误(使用默认设置)。事实上,Oracle确实将空字符串视为NULL
。这包括比较,所以:
where mycolumn = ''
与:
相同where mycolumn = NULL
这永远不会返回true(NULL <> NULL
)。
我的建议?习惯明确地使用NULL
并写下:
where mycolumn is null
答案 1 :(得分:2)
因为Oracle很奇怪。它将NULL和空字符串视为相同。而且,正因为如此,任何带有'''或!=''的东西都会有一个UNKNOWN的逻辑值,永远不会为TRUE。要使用空字符串检查相等性或不等式,必须检查mycolumn IS NULL或IS NOT NULL。 (这部分虽然关于检查NULL,但不是Oracle - 它是SQL标准。)在任何情况下,在Oracle中,相等条件是=而不是==。
答案 2 :(得分:1)
在Oracle中,空字符串被视为空值。同样重要的是要注意,null值是唯一的,因为你不能在空值上使用通常的操作数(=,&lt;,&gt;等)。相反,您必须使用IS NULL和IS NOT NULL条件。
答案 3 :(得分:0)
NULL值表示缺失或未知数据。 NULL值用作占位符或列中的默认条目,以指示不存在实际数据。 NULL在SQL中是无类型的,这意味着它不是整数,字符或任何其他特定数据类型。
请注意,NULL与空数据字符串或数值&#39; 0&#39;不同。 NULL表示没有值,空字符串和数字零都表示实际值。
虽然可以分配NULL值,但它不能等同于任何东西,包括它自身。同样重要的是要注意空值是唯一的
因为NULL不表示或等同于数据类型,所以不能使用任何比较运算符测试NULL值,例如=,&lt;或&lt;&gt;。
这可以帮助您清楚地了解Oracle中的NULL。