在你习惯以前,NULL
值可能会使人惊讶,从概念上讲,NULL
表示“缺失的未知值”,而且与其余值的处理方式略有不一样。mysql
要测试NULL
,请使用IS NULL
和IS NOT NULL
运算符,以下所示:sql
mysql> SELECT 1 IS NULL, 1 IS NOT NULL; +-----------+---------------+ | 1 IS NULL | 1 IS NOT NULL | +-----------+---------------+ | 0 | 1 | +-----------+---------------+
你不能使用算术比较运算符(如=
、<
或<>
)来测试NULL
,要本身演示,请尝试如下查询:segmentfault
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL; +----------+-----------+----------+----------+ | 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL | +----------+-----------+----------+----------+ | NULL | NULL | NULL | NULL | +----------+-----------+----------+----------+
由于与NULL
进行任何算术比较的结果也是NULL
,因此没法从这种比较中得到任何有意义的结果。测试
在MySQL中,0
或NULL
表示false
,其余任何表示都是true
,布尔运算的默认真值为1
。code
在GROUP BY
中,两个NULL
值被视为相等。字符串
在执行ORDER BY
时,若是你执行ORDER BY ... ASC
,则首先显示NULL
值,若是执行ORDER BY ... DESC
,则为最后一个值。get
使用NULL
时常见的错误是假设没法将零或空字符串插入定义为NOT NULL
的列中,但事实并不是如此,这些其实是值,而NULL
表示“没有值”,你可使用IS [NOT] NULL
轻松地测试它,以下所示:查询
mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL; +-----------+---------------+------------+----------------+ | 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL | +-----------+---------------+------------+----------------+ | 0 | 1 | 0 | 1 | +-----------+---------------+------------+----------------+
所以,彻底能够将零或空字符串插入NOT NULL
列,由于它们其实是NOT NULL
。co