MySQL-NULL
参考文献
NULL
值
- 在 MySQL 中的
NULL
是一种特殊的数据.一个字段是否允许为NULL
,字段默认值是否为NULL
.
字段类型 | 表定义中设置方式 | 字段值 |
---|---|---|
数值类型 (INT/BIGINT) | Default NULL / Default 0 | NULL / NUM |
字符类型 (CHAR/VARCHAR) | Default NULL / Default ” / Default ‘ab’ | NULL / ” / String |
NULL
与空字符存储上的区别
- 表中如果允许字段为
NULL
,会为每行记录分配NULL
标志位.NULL
除了在每行的行首存有NULL
标志位,实际存储不占有任何空间.如果表中所有字段都是非NULL
,就不存在这个标示位了
NULL
的问题
数值类型,以 INT 列为例
- 在 min / max / sum / avg 中
NULL
值会被直接忽略掉 - 对
NULL
做加减操作,如 1 +NULL
,结果仍是NULL
- order by 以升序检索字段的时候
NULL
会排在最前面(倒序相反) - group by / distinct 时,
NULL
值被视为相同的值 NULL
值无法与其他值进行常规比较(= 或 !=).因此需要使用IS NULL
或IS NOT NULL
进行判断.
字符类型,在使用 NULL
值的时候,也需要格外注意
-
字段是字符时,你无法一目了然的区分这个值到底是
NULL
,还是字符串’NULL
’ -
COUNT 函数对
NULL
的处理:- COUNT(*) 会计算行数,不会忽略
NULL
. - COUNT(column) 会忽略
NULL
值,仅计算非NULL
的值.例如:COUNT(column) 只返回 column 非NULL
值的数量.
- COUNT(*) 会计算行数,不会忽略
-
如果用 length 去统计一个 VARCHAR 的长度时,
NULL
返回的将不是数字 -
当对
NULL
值进行字符串拼接时,结果会是NULL
1
SELECT CONCAT('hello', NULL); -- 返回 NULL
-
使用
LIKE
对NULL
值进行匹配时,结果总是返回NULL
,不会有TRUE
或FALSE
.1
SELECT * FROM table WHERE column LIKE '%text%'; -- 如果 column 是 NULL,结果为 NULL
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HoleLin's Blog!