MYSQL中NULL空值与空字符串区别详解及代码

MYSQL中NULL空值与空字符串区别详解及代码

NULL是指没有值
‘‘则表示值是存在的,只不过是长度为零

下面我们实际建立一个表来进行测试和区分。

CREATE TABLE `tb_test` (
  `name` varchar(255) DEFAULT NULL,
  `value` varchar(255) DEFAULT NULL,
  `test` char(0) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入表中几条数据:

insert into tb_test values(‘t1‘,null,null);  ##创建一条value为空的数据
insert into tb_test values(‘t2‘,‘‘,‘‘);      ##创建一条为空字符的数据
insert into tb_test values(‘t2‘,‘111‘,‘‘);
insert into tb_test values(‘t2‘,‘111‘,null);

MYSQL中NULL空值与空字符串区别详解及代码

  1. 对NULL的判断
select * from tb_test where value is null;

select * from tb_test where  ISNULL(value);

? 查询结果:MYSQL中NULL空值与空字符串区别详解及代码

select * from tb_test where value is not null;

select * from tb_test where  ISNULL(value)=0;

查询结果均为:MYSQL中NULL空值与空字符串区别详解及代码

  1. 对空字符串的判断
select * from tb_test where LENGTH(value)=0;

select * from tb_test where value=‘‘;

查询结果均为:MYSQL中NULL空值与空字符串区别详解及代码

select * from tb_test where  LENGTH(test)=0;

select * from tb_test where test=‘‘;

查询结果均为:MYSQL中NULL空值与空字符串区别详解及代码

  1. 同时剔除null 和空字符串
select * from tb_test 
where ISNULL(value)=0 and LENGTH(trim(value))>0;

select * from tb_test where value is not null  and value <>‘‘;

查询结果均为:MYSQL中NULL空值与空字符串区别详解及代码

  1. 对NULL的替换
select name,IFNULL(value,‘我是NULL‘) from tb_test;

select name,COALESCE(value,‘我是NULL‘) from tb_test;

查询结果:MYSQL中NULL空值与空字符串区别详解及代码MYSQL中NULL空值与空字符串区别详解及代码

  1. 在SQL中,NULL值与任何其它值的比较(即使是NULL)永远不会为“真”。

    包含NULL的表达式总是会导出NULL值,除非在关于操作符的文档中以及表达式的函数中作了其他规定。下述示例中的所有列均返回NULL:

    SELECT NULL, 1+NULL, CONCAT(‘test‘,NULL);
    

    查询结果:MYSQL中NULL空值与空字符串区别详解及代码

如果打算搜索列值为NULL的列,不能使用expr = NULL测试。下述语句不返回任何行,这是因为,对于任何表达式,expr = NULL永远不为“真”:

SELECT * FROM tb_test WHERE value = NULL;

查询结果:MYSQL中NULL空值与空字符串区别详解及代码

另外MySQL数据库中执行SQL语句,需要小心几个陷阱:

一、空值不一定为空

  1. TimesTamp数据类型

    如果往这个数据类型的列中插入Null值,则其代表的就是系统的当前时间

  2. 具有auto_increment属性的列

    如果往这属性的列中插入Null值的话,则系统会插入一个正整数序列

  3. 而如果在其他数据类型中,如字符型数据的列中插入Null的数据,则其插入的就是一个空值。

二、Count等统计函数,在空值上也有特殊的应用

使用DISTINCTGROUP BYORDER BY时,所有NULL值将被视为等同的。

使用ORDER BY时,首先将显示NULL值,如果指定了DESC按降序排列,NULL值将最后显示。

SELECT * FROM tb_test order by value;SELECT * FROM tb_test order by value desc;

查询结果分别为:MYSQL中NULL空值与空字符串区别详解及代码MYSQL中NULL空值与空字符串区别详解及代码

三、对于聚合(累计)函数,如COUNT()、MIN()和SUM(),将忽略NULL值。

? 对此的例外是COUNT(*),它将计数行而不是单独的列值。例如,下述语句产生两个计数。首先计数表中的行数,其次计数value列中的非NULL值数目:

代码如下:

SELECT COUNT(*), COUNT(value) FROM tb_test;

查询结果为:MYSQL中NULL空值与空字符串区别详解及代码

MYSQL中NULL空值与空字符串区别详解及代码

上一篇:提高测试覆盖率的4个步骤


下一篇:PyCharm常用配置和常用插件,Mycat和Mysql搭建高可用企业数据库集群