【发布时间】:2014-11-10 16:22:37
【问题描述】:
背景:
我正在处理旧版 SQL Server 2000 数据库(是的,我正在更改它!)。它有一个列,我们可以称之为 name,它是 nvarchar(100) 而不是 null。我已经验证过了。
当我运行这个查询时:
select name
from mytable
where name is null
我没有得到任何结果。但是,当我运行此查询时:
select name
from mytable
where name = ''
我得到大约 100 个结果。我想了解更多关于这些空白值的信息,因为空格在非空列中是合法的,所以我运行了这个查询:
select ASCII(substring(name, 1, 1))
from s
where name = ''
这会为大约三分之一的结果(即空格)返回“32”。然而,对于其他 2/3rds,它返回 null。
问题:
- 如何在具有非空定义的列中存在空值?
- 为什么这些空值没有出现在“name is null”查询中?
【问题讨论】:
-
你没有
NULL值,你自己说的,对吧? -
我猜字符值 '\0` 被解释为
NULL。我相信它的正式名称是“NUL”。 -
你需要明白
ASCII(substring(name, 1, 1))返回你NULL,并不意味着name是空的 -
@Lamak:我没有空值,因为“名称为空”什么都不返回。
-
这意味着其中没有空值。正如我所说,
ASCII(substring(name, 1, 1))与name不同
标签: sql sql-server sql-server-2000