当前位置:首页 > 杂谈 > 正文内容

MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?-mysql中null怎么存储的

2023-07-13 12:02:00TONY杂谈142

作者:极客小俊 一个专注于web技术的80后

我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人!

知乎@极客小俊,官方首发原创文章

浅谈 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_test ​ create 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,会失败 原因就是指定的不允许插入NULL insert 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_test2 ​ create 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_test3 ​ create 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值还是空值()呢?

根据实际业务来进行区分, 个人建议在实际开发中如果没有特殊的业务场景,可以直接使用空字符串值() !

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

更多精彩内容请前往 GeekerJun 或 个人博客、

也可以百度关键字: 极客小俊 获取更多知识干货!

如果以上内容有任何错误或者不准确的地方,欢迎在下面 留个言指出、或者你有更好的

“MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?-mysql中null怎么存储的” 的相关文章

重庆豪宅业主维权维出新高度:香港置地衿湖翠林维权官网开通!

重庆豪宅业主维权维出新高度:香港置地衿湖翠林维权官网开通!

原标题:重庆豪宅业主维权维出新高度:香港置地衿湖翠林维权官网开通! 2023年开年,总是和周边朋友、和自己小区的邻居小聚,几乎没有闲下来过,也好开启业主吹牛会新的一年免费报道服务。火锅才刚烧开,毛肚还没烫一片,电话就响啦:“东哥,重庆豪宅专家崩塌啦!他们开了重庆楼市业主维权的先河...

威马之“危”:多店停摆,人工客服缺位,车主忧虑售后服务

威马之“危”:多店停摆,人工客服缺位,车主忧虑售后服务

3年前,威马汽车还是和蔚来、小鹏、理想齐名的“造车四小龙”之一。2019年,威马更是以16876辆的交付量位居造车新势力第二,仅次于蔚来的20565辆。如今“蔚小理”三大品牌以及哪吒、零跑等均实现10万以上的年销量时,威马汽车却被负面消息缠身:停产、裁人、降薪、欠社保公积...

中国式现代化河北场景·影像记录|走近企业首席质量官

中国式现代化河北场景·影像记录|走近企业首席质量官

转自:河北新闻网 河北蓝鸟家具股份有限公司首席质量官杨艳玲在生产车间查看产品质量。 4月21日早8时,河北蓝鸟家具股份有限公司首席质量官杨艳玲准时出现在生产车间。 加工精度达到±1微米——邢台纳科诺尔精轧科技股份有限公司实施首席质量官制度,对产品质量提出严格要求。...

高速公路紧急救援的措施有哪些?

高速公路紧急救援的措施有哪些?

高速公路交通事故的应急救援包括如下几个过程:事故的确认,及时获取事故发生的地点、事故的类型、事故的规模等信息;事故救援力量的组成;有关人员到达现场;受伤人员救护;事故现场取证;事故现场清理;现场恢复等过程。高速公路交通事故紧急救援体系的根本任务就是及时获取发生交通...

高速遇到突发意外,道路救援如何快速定位?一定要学会看这个!

高速遇到突发意外,道路救援如何快速定位?一定要学会看这个!

现在汽车的普及率非常高,基本上出行都是开车自驾游,但是,如果在开车的行驶途中遇到一些意外,车主无法自己解决,就只能找道路救援了。 很多车主对于道路救援的认知仅停留在拖车这一项服务中,其实遇到了电瓶无电、轮胎爆胎等意外状况,也可以找道路救援,不是只有拖车这一种选择。 道路救援...

免费的图片素材哪里找?推荐你10个网站,从此设计素材不求人!

免费的图片素材哪里找?推荐你10个网站,从此设计素材不求人!

作者:五津 编辑:五津、河豚格格 Hi,大家好~我是五津! 最近,我让新来的同事做张海报,半小时还没动,问她怎么回事,竟然是因为找不到合适的图片素材!? 不知道大家在学 PS、做海报的时候有没有遇到过这种问题呢? 找来找去找不到合...