Author:3# 一个专一于web技术的80后
我不必拼过聪明人,我只须要拼过那些懒人 我就肯定会超过大部分人!
CSDN@ 极客小俊,CSDN官网首发,`3#原创
企业博客: ???? 极客小俊GeekerJun ????
博客园Blog: ???? cnblogs.com/GeekerJun ????

浅谈 NULL 和 空值的区别

NULL也就是在字段中存储NULL值

空字符串值也就是字段中存储空字符('')

咱们来通过测试来看看 他们彼此的区别:

1、占用空间区别

mysql> select length(NULL), length(''), length('1');+--------------+------------+-------------+| length(NULL) | length('') | length('1') |+--------------+------------+-------------+|         NULL |          0 |           1 |+--------------+------------+-------------+1 row in set (0.03 sec)

==小结== : 从下面的测试能够看出 字符串空值('')的长度是0,是不占用空间的, 而的NULL长度是NULL,其实它是占用空间的!

NULL columns require additional space in the row to record whether their values are NULL.

意思是: NULL列须要行中的额定空间来记录它们的值是否为NULL

艰深意义上讲: ('')字符串空值就像是一个真空转态杯子,什么都没有,而NULL值就是一个装满空气的杯子,尽管看起来都是一样的,然而有着实质的区别

2、插入方式区别

#创立一个表,tb_testcreate table tb_test(  id int unsigned primary key auto_increment,  one varchar(10) NOT NULL,  two varchar(255) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;插入进行验证:#全副插入 NULL,会失败  起因就是指定的不容许插入NULLinsert into tb_test(one,two) value (NULL,NULL);1048 - Column 'one' cannot be null#全副插入 空字符串值,胜利  起因就是 ('') 字符 和 NULL的类型都不一样 指定的是不容许插入NULL,又没有说不容许('')空字符串!^.^insert into tb_test(one,two) value ('','');Query OK, 1 row affected#这也是刚刚讲过not null束缚测试insert语句的时候, 插入('')空字符串会胜利的起因! 

3、在查问形式上的区别比照

#创立一个表,tb_test2create table tb_test2(  id int unsigned primary key auto_increment,  one varchar(10) NOT NULL,  two varchar(255) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;#模仿数据:insert into tb_test2(one,two) values (1,NULL);insert into tb_test2(one,two) values ('',2);insert into tb_test2(one,two) values (3,3);#查问one字段#应用 is null 来查问one字段select * FROM tb_test2 where one is null; #后果就是一条也没有,因为one字段并没有代表为NULL的数据存在!#应用 is not null 来查问one字段select * FROM tb_test2 where one is not null;  #后果被全副查问进去,因为one字段中的三个数据都不为NULL这个类型#应用 = 和 != 来查问one字段select * FROM tb_test2 where one ='';select * FROM tb_test2 where one != '';#查问two字段#应用 is null 来查问two字段select * FROM tb_test2 where two is null;  #后果有一条合乎NULL,#应用 is not null 来查问two字段select * FROM tb_test2 where two is not null; #后果是不合乎NULL的有两条#应用 = 来查问two字段select * FROM tb_test2 where two ='';#应用 != 来查问two字段#这里要留神的是为NULL的并没有查问进去,起因用 != 来查 字符串空('')的时候, 会把NULL也当做是字符串空来判断吧! select * FROM tb_test2 where two != ''; 

==小结:== 如果要单纯查NULL值列,则应用 is NULL去查,单纯去查空值('')列,则应用 =''

倡议查问形式:NULL值查问应用is null/is not null查问,而空值('')能够应用=或者!=、<、>等算术运算符来查!


4、在count()统计函数上的区别

#创立一个表,tb_test3create table tb_test3(  id int unsigned primary key auto_increment,  one varchar(10) NOT NULL,  two varchar(255) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;#模仿数据:insert into tb_test3(one,two) values (1,NULL);insert into tb_test3(one,two) values ('',2);insert into tb_test3(one,two) values (3,3);#应用COUNT函数统计one字段:select count(one) from tb_test3;   #后果为: 3 条, 阐明 空字符串('') 会被count()函数统计!#应用COUNT函数统计two字段:select count(two) from tb_test3;   #后果为: 2条,  起因是NULL 不会被count()函数统计到!#留神: 应用 * 号来统计会把NULL算进去!SELECT count(*) FROM tb_test;+----------+| count(*) |+----------+|        3 |+----------+

==理论开发到底是应用NULL值还是空值('')呢?==

依据理论业务来进行辨别, 集体倡议在理论开发中如果没有非凡的业务场景,能够间接应用空字符串值('') !

如果我的博客对你有帮忙、如果你喜爱我的博客内容,请 “点赞” “评论” “珍藏” 一键三连哦!
据说 ???? 点赞 ???? 的人运气不会太差,每一天都会元气满满哦 嘿嘿!!! ❤️ ❤️ ❤️
大家的反对就是我坚持下去的能源。点赞后不要忘了???? 关注 ????我哦!

更多精彩内容请返回 CSDN极客小俊GeekerJun 的博客 或 小俊的博客园、
也能够百度搜寻关键字:???? >极客小俊???? 进行关注哦


如果以上内容有任何谬误或者不精确的中央,欢送在上面 ???? 留个言指出、或者你有更好的想法,欢送一起交流学习~~~

欢送退出咱们技术交换群: