oracle中的空字符串

时间:2016-07-12 16:00:19

标签: sql oracle

当我在数据库表列中插入一个空字符串时,它看起来像是在内部存储为NULL。那么为什么我不能通过查找那个空字符串来选择相应的行呢?

示例:

insert into mytable (mycolumn,col2,col3) values ('','xyz','abc');

// now there is a row having mycolumn == NULL

select * from mytable where mycolumn='';

// empty :(

我该怎么办?

4 个答案:

答案 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)

Read here

在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。

相关问题