+
80
-

mysql中null与空值有什么区别?

请问mysql中null与空值有什么区别?

网友回复

+
0
-

一、长度不同:

NULL长度就是NULL,一个空字符串的长度是0。

二、排序:

NULL在空字符串之前排序。

三、count统计

COUNT(message)将包含含空字符串的字段,但不计算值为NULL的字段。

四、where查询

您可以使用绑定变量搜索空字符串,但不能搜索NULL。该查询:

SELECT * FROM mytable WHERE mytext = ?

无论您从客户端传递的值是什么,都永远不会匹配NULL的字段。要匹配NULL,您必须使用其他查询:

SELECT * FROM mytable WHERE mytext IS NULL

五、实例讲解

例如,以下语句完全不同:

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

这两个语句都会在该phone列中插入一个值,但是第一个语句将插入一个 NULL值,第二个语句将 插入一个空字符串。

第一个的含义可以视为 “未知电话号码”,第二个的含义可以视为“已知该人没有电话,因此也没有电话号码”。” 为了帮助NULL处理,可以使用 IS NULL和IS NOT NULL运算符以及 IFNULL()函数。 在SQL中,与NULL其他任何值(甚至)相比,该值永远不会为真NULL。除非文档中针对表达式中涉及的运算符和函数另有说明,否则包含的表达式NULL始终会产生一个NULL值。以下示例中的所有列均返回NULL:

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

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

mysql> SELECT * FROM my_table WHERE phone = NULL;

要查找NULL值,必须使用 IS NULL测试。以下语句显示如何查找NULL电话号码和空电话号码:

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

有关更多信息和示例,请参见第3.3.4.6节“使用NULL值”。 您可以在可以有一列中添加索引 NULL,如果您使用的值 MyISAM,InnoDB或 MEMORY存储引擎。否则,必须声明一个索引列NOT NULL,并且不能插入NULL该列。 使用读取数据时LOAD DATA,空白列或缺失列将使用更新 ''。要将NULL值加载到列中,请\N在数据文件中使用。NULL在某些情况下,也可以使用原义词。请参见第13.2.6节“ LOAD DATA语句”。 使用DISTINCT,GROUP BY或时ORDER BY,所有 NULL值均视为相等。 使用时ORDER BY, NULL值将首先显示,如果您指定DESC按降序排序,则最后显示。 集合体(组)的功能,例如 COUNT(), MIN(),和 SUM()忽略 NULL的值。例外是 COUNT(*),它计算行而不是单个列的值。例如,以下语句产生两个计数。第一个是对表中行数的计数,第二个是NULL对age列中非值 数的计数:

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

对于某些数据类型,MySQLNULL 专门处理值。如果您插入NULL到 TIMESTAMP列中,则会插入当前日期和时间。如果您插入 NULL具有该AUTO_INCREMENT 属性的整数或浮点列,则将插入序列中的下一个数字。
我知道答案,我要回答