NULL 是一种 "没有类型" 的值, 通常表示 "无值","未知值","缺失值","超界","不在其中" 等, 我们在日常运用中很容易和 NULL 字符串混淆, 这里大致整理了下 NULL 值的一些特性, 以便能够正确使用 NULL 值.
1, 创建表时字段时若未添加默认值, 则默认为 NULL 值
2,NULL 值和 NULL 字符串的区别
1)NULL 值不区分大小写, 查询时都显示为大写 NULL, 而 NULL 字符串则显示为插入时候的大小写, 查询的时候根据字符集是否区分大小写筛选, 或者通过语句级的 collate 或 binary 指定是否区分大小写.
2)NULL 字符串可以当作普通字符串进行处理, 而 NULL 值的判断只有 is null 和 is not null, 见第 5 点
3, 插入数据时若不指定值, 如果没其它默认值, 会用默认值 NULL
4, 当插入大写 NULL 字符时, 就很难区别 NULL 是 NULL 值还是 NULL 字符串了, 这时需要用到 NULL 值的判断, NULL 值的判断只有 is NULL 和 is not NULL
通过肉眼很难区别, 这里通过 NULL 值的判断, 可以看到 id2 为 NULL 值的只有 3 行, 非 NULL 值的有 7 行, 而为 NULL 字符串的有 4 行
5,SQL 里面对 NULL 值的处理函数有 isnull(expr)(返回 is NULL 的逻辑判断结果)和 ifnull(expr1,expr2)(如果 expr1 is null 则返回 expr2, 否则返回 expr1)
6, 和 NULL 值的比较运算和算术运算, 结果仍为 NULL 值, 但是 <=> 运算符时, NULL<=>NULL 为真
7, 和 NULL 值的逻辑运算, is NULL 运算只有 null is null 为真返回数字 1,is not NULL 运算只有 null is not null 为假返回数字 0
8,MySQL 会把单独的 \ N(区分大小写)当作 NULL 值
9,NULL 值和空字符''不一样, 查询字段为空字符时, 可以用等号, 不考虑长度, 都显示为空, 但是长度不一样
10, 空字符和其他字符做算术运算时当作 0 处理, 但是当做分母时运算结果为 NULL
11,NULL 值会被 count(字段)函数过滤, 但是在 count(*)中不会被过滤
12, 在 group by 函数中 NULL 会当作同一个值放在最最小值前
13, 其他一些函数中如果有 NULL 值, 返回结果为 NULL, 如:
来源: http://www.linuxidc.com/Linux/2018-12/156003.htm