# B.3.4.3 NULL 值问题

的概念空值对于 SQL 新手来说,value 是一个常见的混淆来源,他们经常认为空值与空字符串相同''.不是这种情况。例如,以下陈述完全不同:

mysql> INSERT INTO my_table (phone) VALUES (NULL);
mysql> INSERT INTO my_table (phone) VALUES ('');

两个语句都向电话列,但第一个插入一个空值值,第二个插入一个空字符串。第一个的意思可以认为是“电话号码不知道”,第二个的意思可以认为是“知道这个人没有电话,因此没有电话号码”。

为了帮助空值处理,您可以使用一片空白不为空运营商和IFNULL()功能。

在 SQL 中,空值与任何其他值相比,值永远不会为真,即使空值.包含的表达式空值总是产生一个空值值,除非在文档中针对表达式中涉及的运算符和函数另有说明。以下示例中的所有列都返回空值

mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);

搜索列值空值, 你不能使用表达式 = NULL测试。以下语句不返回任何行,因为表达式 = NULL对于任何表达式都不是真的:

mysql> SELECT * FROM my_table WHERE phone = NULL;

寻找空值值,您必须使用一片空白测试。以下语句显示如何找到空值电话号码和空电话号码:

mysql> SELECT * FROM my_table WHERE phone IS NULL;
mysql> SELECT * FROM my_table WHERE phone = '';

第 3.3.4.6 节,“使用 NULL 值”,以获取更多信息和示例。

您可以在可以具有的列上添加索引空值如果您使用的是值MyISAM,InnoDB, 要么记忆存储引擎。否则,您必须声明一个索引列非空,并且您不能插入空值入列。

读取数据时加载数据, 空列或缺失列更新为''.加载一个空值值到列中,使用\N在数据文件中。字面意思空值在某些情况下也可以使用。看第 13.2.7 节,“加载数据语句”.

使用时清楚的,通过...分组, 要么订购方式, 全部空值值被视为相等。

使用时订购方式,空值值首先显示,如果您指定,则最后显示DESC以降序排序。

聚合(组)功能,例如数数(),最小(), 和和()忽视空值价值观。例外情况是数数(*),它计算行而不是单个列值。例如,以下语句产生两个计数。第一个是统计表中的行数,第二个是统计非行数空值中的值年龄柱子:

mysql> SELECT COUNT(*), COUNT(age) FROM person;

对于某些数据类型,MySQL 处理空值特别重视。如果你插入空值成一个时间戳列,插入当前日期和时间。如果你插入空值放入具有自动递增属性,插入序列中的下一个数字。