Oracle中空字符串''与null是否相同及查询、区分相关问题
Oracle中空字符串与NULL的相关问题解答
场景背景
我们在Oracle数据库中创建了包含id和name列的PRODUCTS表,执行了以下插入语句:
insert into PRODUCTS(id,name) values(1,''); insert into PRODUCTS(id,name) values(2,null); insert into PRODUCTS(id,name) values(3,'product1');
查询后得到结果:
| ID | Name |
|---|---|
| 1 | (null) |
| 2 | (null) |
| 3 | product1 |
针对该场景的四个问题解答如下:
1. 能否查询出name为''的行?
不能。Oracle会自动将空字符串''转换为NULL存储,插入后这行的name实际是NULL,无法通过name = ''这类条件查询到对应的行。
2. 能否查询出name为null的行?
可以,但必须使用IS NULL条件,不能用name = NULL(因为NULL不等于任何值,包括它自己)。执行以下SQL即可查询到目标行:
SELECT * FROM PRODUCTS WHERE name IS NULL;
该语句会返回id为1和2的两行数据。
3. Oracle中的''与null是否相同?
是的,在Oracle中两者等价。无论你插入的是空字符串''还是NULL,Oracle都会将其统一存储为NULL,查询时也无法区分这两种输入的差异。
4. 能否在Oracle包中区分''与null?
不能。Oracle的SQL和PL/SQL引擎都会把空字符串当作NULL处理,即使在PL/SQL包的逻辑里,也无法区分传入的是空字符串还是NULL,两者的行为完全一致。
内容的提问来源于stack exchange,提问作者Piyush
相关产品推荐
相关产品推荐

