![16a31730159c234e759d3ec48cc841b7.png](https://i-blog.csdnimg.cn/blog_migrate/fca234a81d5a48f26578f310a1d7a37e.jpeg)
NULL是一种“没有类型”的值,通常表示“无值”,“未知值”,“缺失值”,“超界”,“不在其中”等,我们在日常运用中很容易和NULL字符串混淆,这里大致整理了下NULL值的一些特性,以便能够正确使用NULL值。
1,创建表时字段时若未添加默认值,则默认为NULL值
![26d7f47fccde5c0ec6eac72ca79daae8.png](https://i-blog.csdnimg.cn/blog_migrate/105abcd90b4e616df381d72a5f704d78.png)
![91dff5215b82335c0c6b8eecda1919ed.png](https://i-blog.csdnimg.cn/blog_migrate/a94222e680054f69abf84920dd412a17.jpeg)
2,NULL值和NULL字符串的区别
1)NULL值不区分大小写,查询时都显示为大写NULL,而NULL字符串则显示为插入时候的大小写,查询的时候根据字符集是否区分大小写筛选,或者通过语句级的collate或binary指定是否区分大小写。
2)NULL字符串可以当作普通字符串进行处理,而NULL值的判断只有is null和 is not null,见第5点
![40127736f37c908eb06c5043e49e5ee2.png](https://i-blog.csdnimg.cn/blog_migrate/57d1aea6b742ac5cc1a377bcc81d0fb9.jpeg)
![368a66fbbd309a2b605e1936ab43d1f5.png](https://i-blog.csdnimg.cn/blog_migrate/9cbe959fd9895db085ed1afa49ad50a3.jpeg)
3,插入数据时若不指定值,如果没其它默认值,会用默认值NULL
![79aaf02f5d2b90a7d882f6a6bd23486c.png](https://i-blog.csdnimg.cn/blog_migrate/8fd48a4140fedc3be8b9d049f1c1e901.jpeg)
4,当插入大写NULL字符时,就很难区别NULL是NULL值还是NULL字符串了,这时需要用到NULL值的判断,NULL值的判断只有is NULL和is not NULL
![a4d3925eb26d8a1c8aa819a2cb13e4bf.png](https://i-blog.csdnimg.cn/blog_migrate/63b5dbd2920911bbf5842249c81a351a.jpeg)
通过肉眼很难区别,这里通过NULL值的判断,可以看到id2为NULL值的只有3行,非NULL值的有7行,而为NULL字符串的有4行
![1622560b4e38612ec6d99081595cb4e6.png](https://i-blog.csdnimg.cn/blog_migrate/82c35240c098ec724fe0b68ed23d9768.jpeg)
5,SQL里面对NULL值的处理函数有isnull(expr)(返回is NULL的逻辑判断结果)和ifnull(expr1,expr2)(如果expr1 is null则返回expr2,否则返回expr1)
![cafb1114bbb6083cebf9890cd169fa4a.png](https://i-blog.csdnimg.cn/blog_migrate/b3228dbe37adac543cfc2e3efa5d4ce2.jpeg)
6,和NULL值的比较运算和算术运算,结果仍为NULL值,但是<=>运算符时,NULL<=>NULL为真
![48d63500218d63e2ea1583270a1a7cd1.png](https://i-blog.csdnimg.cn/blog_migrate/aff1470965f02c8853d55580ed013c2e.jpeg)
![7fbe33ea475fdee1c08c0ed92e9a2d1a.png](https://i-blog.csdnimg.cn/blog_migrate/fca45a138450ec2523a3c388dc5c5e07.jpeg)
![bdd481d2971c4089a6a8edbfba482729.png](https://i-blog.csdnimg.cn/blog_migrate/3f6d8180a5e92d5b75c178e8769eb392.jpeg)
7,和NULL值的逻辑运算,is NULL运算只有null is null为真返回数字1,is not NULL运算只有 null is not null为假返回数字0
![994ba5e19ce077c52ea575954571a665.png](https://i-blog.csdnimg.cn/blog_migrate/957306cf28a8fad9c5d99f0ee0b66147.png)
8,mysql会把单独的N(区分大小写)当作NULL值
![3fc7a169696e7718f9896bec22e21aa4.png](https://i-blog.csdnimg.cn/blog_migrate/b3afafbc7853c0e0988a21a8a7eb2d38.jpeg)
9,NULL值和空字符’’不一样,查询字段为空字符时,可以用等号,不考虑长度,都显示为空,但是长度不一样
![eb0ea2440ec663847e50d1d263bd3f21.png](https://i-blog.csdnimg.cn/blog_migrate/a0fc048932b16144f643a07f8f89bdd1.png)
![4af08e16a3faeb00e80bb632d2a8ec9d.png](https://i-blog.csdnimg.cn/blog_migrate/a1476cc39f53c469c14fdeb967a56391.png)
![323f58d138bcb7229a14811babd0c212.png](https://i-blog.csdnimg.cn/blog_migrate/569d76f61961281c74019d3a8dc15adb.png)
![7cf45dc0a398865aaa50d999f9bf52ac.png](https://i-blog.csdnimg.cn/blog_migrate/3fcb08c61fa8c401ac7caed78c4cf2a6.png)
![5070648b3e50b1db15f3b3572bd54b5d.png](https://i-blog.csdnimg.cn/blog_migrate/55ded24881ac8bd99ba321dcdb1eb3aa.jpeg)
10,空字符和其他字符做算术运算时当作0处理,但是当做分母时运算结果为NULL
![767fe70a2b0e0bbb2870a3496730e41e.png](https://i-blog.csdnimg.cn/blog_migrate/b0988aef6c761753ce5db517ad80dd78.png)
11,NULL值会被count(字段)函数过滤,但是在count(*)中不会被过滤
![1338ecead0fb896e3cc5273badad1901.png](https://i-blog.csdnimg.cn/blog_migrate/41ad2cc5cb02cc95eb946db6cf87ca4a.jpeg)
![4595b6f2dac178471c48ecd7bdbf223c.png](https://i-blog.csdnimg.cn/blog_migrate/e7d595a175cc7f5022bdd9a8242cdaba.jpeg)
![feeaac621e6155fcb4e2b713624bced6.png](https://i-blog.csdnimg.cn/blog_migrate/5c31ec2e3a95fbfc98b91cb4c674acb1.jpeg)
12,在group by函数中NULL会当作同一个值放在最最小值前
![e5464058f8585d058e17358c2e9cd8df.png](https://i-blog.csdnimg.cn/blog_migrate/193cb0329ab7d6451f6b764abafc5bf5.jpeg)
13,其他一些函数中如果有NULL值,返回结果为NULL,如:
![e2938b664f01ccaf870d59d8e158c3f8.png](https://i-blog.csdnimg.cn/blog_migrate/db3bc734572169046715f6a829ae9bb3.png)