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