【MySQL】空值(Null)和空字符串(‘’)的区别
一、 NULL,空值,数字,汉字,字母
根据上边的实操可以清楚看出:
- 空值(Null)的长度是 Null,不确定占用了多少存储空间,但是占用存储空间的
- 空字符串('')的长度是0,是不占用空间的
- 字母和数字每个都占用一个长度
- 汉字在字段中存储一个字的长度为3
二、区别
- 在进行 count() 统计某列时候,如果用 Null 值系统会自动过滤掉,但是空字符会进行统计。不过 count(*) 会被优化,直接返回总行数,包括 Null 值。
- 当使用 is not null 或者 is null 时,只能查出字段中没有不为 null 的或者为 null 的,不能查出空字符
- 判断 Null 用 is null 或 is not null, SQL可以使用 ifnull 函数,将 null 转换为 ''空字符,然后判断空字符用 = '' 或者 <>'' 来进行处理。
说明:
IFNULL(expression, alt_value)
IFNULL有两个参数, 如果第一个参数字段不是NULL,则返回第一个字段的值。 否则,IFNULL函数返回第二个参数的值(默认值)。
三、实例
1、新建一张表 test,并插入4行数据
2、 首先比较一下,空字符('')和空值(null)查询方式的不同
select * from test where col_a = '';
select * from test where col_a is null;
由此可见,null 和 '' 的查询方式不同。而且比较字符 = > < <> 不能用于查询 null,如果需要查询空值(null),需要使用 is null 和 is not null。
3、第二种比较,参与运算
select col_a + 1 from test where id = '4'
select col_b + 1 from test where id = '4'
由此可见,空值(null)不能参与任何计算,因为空值参与任何计算都为空。所以,当程序业务中存在计算的时候,需要特别注意。
如果非要参与计算,需使用 ifnull 函数,将 null 转换为 '' 空字符才能正常计算。
4、第三种比较,统计数量
select count(col_a) from test;
select count(col_b) from test;
由此可见,当统计数量的时候。空值(null)并不会被当成有效值去统计。
同理,sum() 求和的时候,null也不会被统计进来,这样也能理解。
四、总结
- 所以在设置默认值的时候,尽量不要使用 null 当默认值。如果是 varchar 类型,默认值用空字符(‘’)会更好一些。带有 null 的默认值还是可以走索引的,只是会影响效率。
- 在设置字段的时候,可以给字段设置成 not null,因为 not null 这个概念和默认值是不冲突的。
五、参考文档
- mysql 空值(null)和空字符('')的区别
【MySQL】空值(Null)和空字符串(‘’)的区别相关推荐
- Oracle中Null与空字符串''的区别
http://read.newbooks.com.cn/info/172049.html Oracle中Null与空字符串''的区别 来源:CSDN 作者:jsjzzh 发布时间:2007-1 ...
- Django与SQL语言中——NULL与空字符串的区别
SQL有指定空值的独特方式,它把空值叫做NULL. Null在数据库中表示 不知道的数据,主要有3种意思: 1)知道数据存在,但不知道具体值. 2)不知道数据是否存在. 3)数据不存在. 在SQL中, ...
- Oracle中Null与空字符串' '的区别
含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除 ...
- null和空字符串('')的区别
在Java开发中,我们需要常常判断是否值为null,尤其在xml数据交互过程中,我们判断某一个报文的值是否为null时候,经常需要用三目运算判断:如果值为null,则赋值空字符串(insert数据库时 ...
- oracle数据库null和空字符串区别,null和空字符串('')的区别
在Java开发中,我们需要常常判断是否值为null,尤其在xml数据交互过程中,我们判断某一个报文的值是否为null时候,经常需要用三目运算判断:如果值为null,则赋值空字符串(insert数据库时 ...
- Oracle 与 Mysql NULL值,空字符串''的区别
Oracle(null等同于空字符'') 1.oracle插入空字符串默认替换成null 2.oracle查询(null和被替换的空字符)时使用 is null/is not null 3.使用聚合函 ...
- Mysql 中null与空字符串陷进
前阵子在更新数据库时候碰见一个新增表的语句,发现插入的空值自动填充的值,很是费解,下面我们先来说说案例,以下是模仿的测试: 首先创建一个表:create table ceshi(ID INT ,cre ...
- Java关于null和空字符串““的区别
我们都知道当我们new一个String类型的变量是时,用的是 String str = null:而不是Sting str ="": null不会分配内存空间,相当于什么都没有. ...
- 后台获取前台传递参数为null和空字符串的区别,以及sql拼接之if判断
1.获取到的值为null 当URL路径中没有"name"属性,此时后台使用request.getParameter("name")获取到的值为null; 2.获 ...
- oracle和mysql空字符串_Oracle数据库中对null值的排序及mull与空字符串的区别
order by排序之null值处理方法在对业务数据排序时候,发现有些字段的记录是null值,这时排序便出现了有违我们使用习惯的数据大小顺序问题.在Oracle中规定,在Order by排序时缺省认为 ...
最新文章
- 全球及中国电镀砂轮行业盈利模式分析与十四五投资规划研究报告2021年版
- 【转】IAR与Keil两款开发工具区别
- 4. MyBatis几个可以优化的地方
- 静态类 c# 1615139615
- awk调用shell命令的两种方法:system与print
- Cocoa Touch事件处理流程--响应者链
- (转)Hibernate框架基础——一对多关联关系映射
- sublime与python交互
- python 写xml_使用python 写xml文件
- 钩子的应用: 程序运行监视
- 让django完成翻译,迁移数据库模型
- Visual Studio:注释/取消注释快捷键
- python实现csdn博客下载
- 思科刀片服务器系统,思科 UCS B 系列刀片服务器
- 豆瓣top250电影数据分析
- 【搜狗输入法安装包文件有异常,错误码:2,现在终止安装】解决办法
- 线下实体零售门店如何做好会员运营管理系统?
- 1w字详解 ClickHouse漏斗模型实践方案(收藏)
- 【电子电路】ADC芯片如何选型
- 国际清算银行称:央行数字货币可能导致银行挤兑
热门文章
- 华为p30怎样找回计算机,在华为p30中进行连接电脑的详细步骤
- 从cmd 连接mysql_通过cmd命令连接mysql
- 微软车库与微软黑客松:微软复兴的“秘密武器”
- 一支不足百人的团队创造了ChatGPT :90后挑大梁,应届生11人,华人抢眼
- 手把手教你在阿里云ECS上搭建惊艳的博客
- idea git 合并分支 冲突处理
- 读取和写入注册表RegOpenKeyEx、RegCloseKeyEx、RegQueryValueEx、RegCreateKeyEx、RegSetValue
- 互联网,只有信仰才能坚持!
- MySQL聚簇索引 非聚簇索引 覆盖索引与回表
- 【花雕】全国青少年机器人技术一级考试模拟题(之一)