繁体   English   中英

oracle中的空字符串

[英]empty string in oracle

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

例:

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

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

select * from mytable where mycolumn='';

// empty :(

我该怎么办?

这是Oracle中的古怪时代(使用默认设置)。 实际上,Oracle确实将空字符串视为NULL 这包括比较,因此:

where mycolumn = ''

是相同的:

where mycolumn = NULL

而且它永远不会返回true( NULL <> NULL )。

我的建议? 习惯于显式使用NULL并编写:

where mycolumn is null

因为Oracle很奇怪。 它将NULL和空字符串视为相同。 因此,带有=或!=的任何内容的逻辑值都为UNKNOWN,从不为TRUE。 要使用空字符串检查是否相等或不相等,必须检查mycolumn IS NULL或IS NOT NULL。 (但是,关于检查NULL的这一部分不是Oracle,而是SQL标准。)无论如何,在Oracle中,相等条件是=而不是==。

在这里阅读

空字符串在Oracle中被视为空值。 还需要注意的是,空值是唯一的,因为您不能对空值使用常规的操作数(=,<,>等)。 而是必须使用IS NULL和IS NOT NULL条件。

NULL值表示丢失或未知的数据。 NULL值用作占位符或用作列中的默认条目,以指示不存在实际数据。 在SQL中未键入NULL,这意味着它不是整数,字符或任何其他特定数据类型。

请注意,NULL与空数据字符串或数值“ 0”不同。 NULL表示缺少值,而空字符串和数字零都表示实际值。

虽然可以分配NULL值,但不能将其等同于任何事物,包括它本身。还必须注意,NULL值是唯一的

因为NULL不代表或等于数据类型,所以不能使用任何比较运算符(例如=,<或<>)测试NULL值。

这可以帮助您清楚地了解Oracle中的NULL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM