2022-03-15 14:53:34
在Oracle中,空字符串与NULL的核心区别在于概念定义、比较行为、函数与操作符表现、存储空间占用及其他数据库特性差异。具体分析如下:
概念定义与另一个空字符串比较时结果为相等('' = ''返回TRUE)。
与NULL比较时结果为不相等('' IS NULL返回FALSE)。
与任何值(包括自身)比较时结果均为未知(NULL = NULL返回NULL,需用IS NULL判断)。
在WHERE条件中,NULL会导致条件不成立(如WHERE column = NULL不会返回任何行)。
LENGTH()函数:返回0(如LENGTH('')结果为0)。
连接操作符(+或||):与其他字符串连接时保留空值(如'' || 'ABC'结果为'ABC')。
算术操作:转换为数值0(如1 + ''可能报错或隐式转换失败,但某些场景下视为0)。
LENGTH()函数:返回NULL(如LENGTH(NULL)结果为NULL)。
连接操作符:与其他值连接时结果为NULL(如NULL || 'ABC'结果为NULL)。
算术操作:结果为NULL(如1 + NULL结果为NULL)。
空字符串:每个空字符串实例被视为唯一值(如表中可存在多行column = '')。
NULL:所有NULL值被视为同一未知值(唯一约束不排斥多行column IS NULL)。
空字符串:被视为非空值,参与计算(如COUNT('')统计行数,SUM('')可能报错或视为0)。
NULL:被忽略(如COUNT(NULL)返回0,AVG(NULL)不参与计算)。
空字符串:可被索引(如B树索引会存储空字符串的条目)。
NULL:不能被索引(索引条目不包含NULL值,但可通过IS NULL条件扫描基表)。
空字符串:可设置为列的默认值(如DEFAULT '')。
NULL:若列未定义NOT NULL约束,则默认允许NULL(无需显式设置)。
Oracle中空字符串与NULL的本质差异体现在: