在 MySQL 中,NULL
和空字符串 (''
) 有着显著的区别:
数据类型:
NULL
代表“无值”或“未知的值”,即没有被赋予任何数据。- 空字符串 (
''
) 代表一个长度为零的字符串,它是有效的字符串数据。
含义:
NULL
表示没有值,通常用于表示缺失、不适用或未知的数据。- 空字符串 (
''
) 则表示已经存储了数据,只不过这个数据是一个空的字符串,并不等于“无值”。
比较:
NULL
和任何值的比较都会返回NULL
,因为NULL
表示未知,不能确定是否与其他值相等。例如:1
SELECT NULL = NULL; -- 返回 NULL(即不确定)
空字符串 (
''
) 可以与其他字符串进行比较,空字符串等于空字符串。例如:1
SELECT '' = ''; -- 返回 1(即 TRUE)
索引和性能:
- 对于
NULL
,如果某列包含NULL
值,通常不会像空字符串那样被存储到索引中,这可能会影响查询性能。 - 空字符串通常被认为是有效值,且会被纳入索引。
- 对于
处理方式:
MySQL 提供了
IS NULL
和IS NOT NULL
来检查NULL
值,因为直接用=
来比较NULL
不会返回期望的结果。例如:1
SELECT * FROM table WHERE column IS NULL;
空字符串可以用普通的
=
来进行比较:1
SELECT * FROM table WHERE column = '';
其他:
''
的长度是 0,是不占用空间的,而NULL
是需要占用空间的。NULL
会影响聚合函数的结果。例如,SUM
、AVG
、MIN
、MAX
等聚合函数会忽略NULL
值。COUNT
的处理方式取决于参数的类型。如果参数是*
(COUNT(*)
),则会统计所有的记录数,包括NULL
值;如果参数是某个字段名(COUNT(列名)
),则会忽略NULL
值,只统计非空值的个数。