MySQL中的零和空串的区别

  介绍

本篇内容主要讲解“MySQL中的零和空串的区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中的零和空串的区别”吧!

  今天接到一个MySQL工单,是执行几条SQL语句。我一看就感觉这语句比较有意思。
语句大体是这样的:
更新app_code_value设置channel_id=null task_id=378和channel_id=& # 39; & # 39;;
更新app_code_value设置channel_id=null task_id=379和channel_id=& # 39; & # 39;;
因为对甲骨文熟悉一些,所以总是喜欢用甲骨文的思维来看很多问题,大多数的情况下是相通的,但是还是有一些差别之处。这些就需要额外注意了。
如果用甲骨文的眼光来看上面的SQL语句,那基本可以断定,这个语句就不用执行了。因为在甲骨文里面空和空串还是不同的含义,但是使用起来的效果是一样的。
当然了关于空,在MySQL,甲骨文中都是为空,不是空这样的语法,这个也是基本的规范。如果使用=null这样的情况,效果和甲骨文是一致的。
select count(*)从app_code_value task_id=378和channel_id=零;
+ - - - - - - - - - - - +
| count (*) |
+ - - - - - - - - - - - +
|,,,,,,,0 |
+ - - - - - - - - - - - +
1行组(0.00秒)
在MySQL里面的零和空串是什么情况呢,我们来看看。
使用空
比;select count(*)从app_code_value task_id=378和channel_id是null;
+ - - - - - - - - - - - +
| count (*) |
+ - - - - - - - - - - - +
|,,,90000 |
+ - - - - - - - - - - - +
1行组(14.46秒)
使用空串
在select count(*)从app_code_value task_id=378和channel_id=& # 39; & # 39;;
+ - - - - - - - - - - - +
| count (*) |
+ - - - - - - - - - - - +
|,,,90000 |
+ - - - - - - - - - - - +
1行组(14.46秒)
如果看上面的结果,很容易会以为两者的效果是一致的。我也差点被这种情况误导。我们再来看一个。
在select count(*)从app_code_value task_id=378,和(channel_id null 或channel_id=& # 39; & # 39;);
+ - - - - - - - - - - - +
| count (*) |
+ - - - - - - - - - - - +
|,,180000 |
+ - - - - - - - - - - - +
1行组(5.41秒)
而直接忽略这个字段是否为空,查看所有匹配的数据,可以看的出,也就这些数据了。
在select count(*)从app_code_value task_id=378;
+ - - - - - - - - - - - +
| count (*) |
+ - - - - - - - - - - - +
|,,180000 |
+ - - - - - - - - - - - +
1行组(5.41秒)
从上面的测试可以看的出,零和空串还是存在一定的差别。如果要形象一点来区分,我看到一个例子很不错,是拿真空和空气的关系来类比空串和null。

零和时间戳

(根:localhost: Jul 结婚;6 22:46:46 2016)[测试]在create table test_null (int id、日期时间戳);
插入test_null值(1,nQuery好,0行影响(0.16秒)

(根:localhost: Jul 结婚;22:46:51 2016)[测试]在插入test_null值(空);
查询好了,1行影响(0.00秒)

(根:localhost: Jul 结婚;6 22:46:51 2016)[测试]在select * from test_null;
+ - - - - - - - - - - - - + +
| id ,| |日期
+ - - - - - - - - - - - - + +
|,,,零| 1 |
+ - - - - - - - - - - - - + +
1行组(0.00秒)
而要更具体一些来区分,可以使用长度。当然我们可以顺带做一些测试。
create table test_null (int id、名称varchar (30));
我们来看看数字类型的表现。
插入test_null (id)值(空);
插入test_null (id)值(& # 39;& # 39;);
在select * from test_null;
+ - - - - - - - - - - - - + +
| id ,| |名称
+ - - - - - - - - - - - - + +
零零| | |
|,,,零| 0 |
+ - - - - - - - - - - - - +
2行组(0.00秒)
可以看到数字类int型的处理,空串会处理成0
我们来清空数据,看看字符型的表现。
截断表test_null;
字符类型插入零和空串
插入test_null(名字)值(空);
插入test_null(名字)值(& # 39;& # 39;);
查看结果如下:
在select * from test_null;
+ - - - - - - - - - - - - + +
| id ,| |名称
+ - - - - - - - - - - - - + +
零零| | |
零| |,,,,,|
+ - - - - - - - - - - - - +
2行组(0.00秒)
空串的处理还是特别的。空串就是空串。
我们来看看使用长度来比较这两个字段的结果。
在选择长度(id)、id、长度(名字),名字从test_null;
+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - +
|长度(id) | id ,|长度(名字)|名称|
+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - +
|,,,,,,空零| |,,,,,,,,空零| |
|,,,,,,空零| |,,,,,,,,,,,0 |,,,,,|

MySQL中的零和空串的区别