[英]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.