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

MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?(mysql的numeric类型和decimal的区别)

2023-08-02 19:43:18TONY杂谈76

作者:极客小俊 一个专注于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的numeric类型和decimal的区别)” 的相关文章

俄罗斯卢布上演“惊天逆转”:对美元暴涨200%,怎么做到的?

俄罗斯卢布上演“惊天逆转”:对美元暴涨200%,怎么做到的?

来源:国是直通车 暴跌约50%,反弹近200%,今年以来俄罗斯卢布对美元汇率坐上了“V”型过山车。 从3月份的全球表现最差货币,到最近的全球表现最佳货币,俄罗斯卢布仅用了两个多月时间。这样的“惊天逆转”到底是怎么完成的? 卢布没被打趴下 俄乌冲突以来,俄罗斯...

IE浏览器彻底凉凉!网友:各种考试报名怎么办?

IE浏览器彻底凉凉!网友:各种考试报名怎么办?

hello,大家好,我是静读君。 今天找选题的时候,看到了知乎热榜上的一条问题:如何看待IE浏览器将于2022年6月15日正式停用? 静读君看到问题的心情是:爷青结,之前flash先走一步,现在IE也要说再见了。1 IE浏览器算是很多80、90后的青春记忆...

昆明云内动力股份有限公司关于自主可控轻型移动源电控发动机关键技术及应用项目通过科技成果评价的公告

昆明云内动力股份有限公司关于自主可控轻型移动源电控发动机关键技术及应用项目通过科技成果评价的公告

  本公司及董事会全体成员保证信息披露内容的真实、准确、完整,没有虚假记载、误导性陈述或重大遗漏。   昆明云内动力股份有限公司(以下简称“公司”)与同济大学、常州易控汽车电子股份有限公司、无锡恒和环保科技有限公司、钧风动力系统(上海)有限公司、昆明理工大学等单位共同完成的“自主...

高度警惕,新型诈骗!这种二维码千万别扫!

高度警惕,新型诈骗!这种二维码千万别扫!

现在很多人都喜欢在网上购物并快递到家,不过警方提醒大家,对于来历不明的快递,要当心其中暗藏陷阱。近日,广东广州市荔湾区警方在网络巡查中发现,有人差点被这些“快递陷阱”诈骗了30万元。  张小姐近日收到一个快递,起初以为是商家赠送的福利,当她扫描礼物上的二维码后,莫名其妙就加入了一个聊天群。在群内,张...

剑网3盒子上线后直接打钱开抢的群体 大概只有剑网三玩家了

剑网3盒子上线后直接打钱开抢的群体 大概只有剑网三玩家了

作为一个从出偷跑图就一定要买这个剑网3盒子的人是怎么做的呢。27日晚上冲钱,找了一个抢限量从不翻车亲友买限时,两个主播亲友以防万一准备抢限量。第一个买限时的亲友手速网速可怕,而且3分钟时间其实她是足够的。后两个家伙因为电脑网速都比较好,作为不得已的备选方案。八点钟开始提醒第一个亲友上线,她上线直接飞...

4.26世界知识产权日——进检君带你一起了解知识产权

4.26世界知识产权日——进检君带你一起了解知识产权

2023年4月26日是第23个世界知识产权日,今年全国知识产权宣传周活动的主题是“加强知识产权法治保障、有力支持全面创新”。 世界知识产权日,由世界知识产权组织于2001年4月26日设立,并决定于2001年起将每年4月26日定为“世界知识产权日”,目的是在世界范围内树立尊...