作者:极客小俊 一个专注于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,会失败  原因就是指定的不允许插入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_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 或 个人博客、

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

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

db2中null和空值的区别_MySQL数据库的表中 NULL 和 空值 到底有什么区别呢?相关推荐

  1. db2中null和空值的区别_MySQL数据库的表中 NULL和空值 到底有什么区别呢?

    作者:极客小俊 一个专注于web技术的80后 你不用拼过聪明人,你只需要拼过那些懒人 你就一定会超越大部分人! NULL也就是在字段中存储NULL值 空字符串值也就是字段中存储空字符('') 我们来通 ...

  2. insert into 插入空值_MySQL数据库的表中 NULL 和 空值 到底有什么区别呢

    浅谈 NULL 和 空值的区别 NULL也就是在字段中存储NULL值 空字符串值也就是字段中存储空字符('') 我们来通过测试来看看 他们彼此的区别: 1.占用空间区别 mysql> selec ...

  3. mysql数据表中取几列_MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 转自:http://www.baike369.com/content/?id=5355 在MySQL中创建数据库的目的是为了使用其中的数据. 使用sel ...

  4. MySQL federated存储引擎--访问在远程数据库的表中的数据,而不是本地的表

    一.FEDERATED简介 federated就像他的名字所说"联盟",意思就是:把两个不同区域的数据库联系起来,以致可以访问在远程数据库的表中的数据,而不是本地的表. 二.安装F ...

  5. mysql doc插入数据_如何向MySQL数据库的表中录入数据.doc

    如何向MySQL数据库的表中录入数据 当建好了数据库及表时,首先想到的就是向数据库的表中输入数据,这就涉及到如何向数据库录入数据,下面我们就来探讨一下这个问题. 1.常用的方法是使用insert语句( ...

  6. excel比较两个表中数据 提取相同列 合并到同一张表中

    比较两个表中数据 提取相同列 合并到同一张表中 =VLOOKUP(A2,Sheet3!A:B,1,0) A2:表示 被查找的值 Sheet3!:表示哪张表 A:B:表示查找区域 1:表示提取哪列的值 ...

  7. 如何在mysql中录入数据库_如何向MySQL数据库的表中录入数据

    当你建好了数据库及表时,你首先想到的就是向数据库的表中输入数据.这就牵涉到如何向数据库增加数据.下面我们就来探讨一下这个问题: 1.一般我们常用的方法是insert语句(这里假定各位的版本都不是很低) ...

  8. 如何在mysql上输入数据表_向MySQL数据库的表中录入数据的方法

    MySQL数据库应用范围相对来说还是比较广泛的,MySQL数据库操作涉及到的知识还是很多的,其中,当你建好了数据库及表时,你首先想到的就是向数据库的表中输入数据.这就牵涉到如何向数据库增加数据.下面我 ...

  9. mysql数据库怎么输入数据_如何向MySQL数据库的表中录入数据

    当你建好了数据库及表时,你首先想到的就是向数据库的表中输入数据.这就牵涉到如何向数据库增加数据.下面我们就来探讨一下这个问题: 1.一般我们常用的方法是insert语句(这里假定各位的版本都不是很低) ...

最新文章

  1. python 运算符 is 与 is not 的理解
  2. SDK开发日积月累(二)
  3. FileUpload控件实现单按钮图片自动上传并带预览显示
  4. oracle读写队列深度,ORACLE TUNE THINKING (三) 操作系统优化
  5. js参数使用时常犯的一个低级错误
  6. boost::geometry::strategy::distance::haversine用法的测试程序
  7. 文本框点击后文字消失总结
  8. win10java怎么运行_win10系统电脑怎样才可以运行Java开发
  9. 前期绑定 php,关于php:后期静态绑定在PHP中的使用
  10. 2021垂直类电商私域化洞察报告
  11. 二维数组矩阵常用实现方法
  12. LoadRunner 11安装手册
  13. 数据挖掘和机器学习之间,主要有什么区别和联系?
  14. zigbee 协调器与终端通信问题
  15. 飞鱼星路由器如何限制外网访问服务器网站,飞鱼星路由器怎么访问指定网站
  16. 苹果退款_苹果退款有什么影响吗
  17. 姜小白的Python日记Day9 变量与递归
  18. Linux上使用腾讯QQ与TIM
  19. 给一个不多于5位的正整数,要求: 1.求出它是几位数; 2.分别输出每一位数字; 3.按逆序输出各位数字;
  20. windows自动卸载程序

热门文章

  1. 阿里云应用高可用服务公测发布
  2. Nacos 发布0.3.0版本,迄今为止最好看的版本
  3. 关于这道填空题,你会如何回答?(附带学习链接)
  4. 计算机毕设最快多长时间,大学几年快结束了,计算机毕设到底该怎么做?
  5. 华为鸿蒙系统p40,华为鸿蒙OS系统正式亮剑!华为P40再次确认:双打孔+麒麟990+鸿蒙OS...
  6. java连接access驱动_Java 连接Access
  7. openoffice 安装windows 环境
  8. Stream anyMatch查找案例
  9. 通过asm动态构造class文件
  10. linux 动态传参执行shell脚本