前阵子在更新数据库时候碰见一个新增表的语句,发现插入的空值自动填充的值,很是费解,下面我们先来说说案例,以下是模仿的测试:

首先创建一个表:create table ceshi(ID INT ,createDate TimesTamp );

包含2个字段,id为int类型,createDate为TimesTamp类型,现在往这个表中插入一条数据,其中createDate类型插入一个空值null;

语句: insert into ceshi values(001,null);

mysql> insert into ceshi values(001,null);

Query OK, 1 row affected (0.01 sec)

插入成功了,现在来查询下这个表中的记录,查看结果如下:

mysql> select * from ceshi;
+------+---------------------+
| ID   | createDate          |
+------+---------------------+
|    1 | 2012-10-08 06:12:34 |
+------+---------------------+
1 row in set (0.01 sec)

我明明插入的是一条空值null,为什么在显示的时候是显示系统当前时间呢?那再试试直接插入空字符串呢?

mysql> insert into ceshi values(002,'');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from ceshi;
+------+---------------------+
| ID   | createDate          |
+------+---------------------+
|    1 | 2012-10-08 06:12:34 |
|    2 | 0000-00-00 00:00:00 |
+------+---------------------+
2 rows in set (0.00 sec)

显示的不是系统当前时间,而是0000-00-00 00:00:00。

那如果字段不是时间类型而是varchar类型,结果又会不会也是一样呢,更改表结构,增加字段name varchar(10),同时插入一条数据:

mysql> insert into ceshi values(003,null,null);
Query OK, 1 row affected (0.01 sec)
mysql> select * from ceshi;
+------+---------------------+------+
| ID   | createDate          | name |
+------+---------------------+------+
|    1 | 2012-10-08 06:12:34 | NULL |
|    2 | 0000-00-00 00:00:00 | NULL |
|    3 | 2012-10-08 06:22:12 | NULL |
+------+---------------------+------+
3 rows in set (0.00 sec)

增加了null值,再往字段中插入''空字符串:

mysql> insert into ceshi(name) values('');
Query OK, 1 row affected (0.01 sec)
mysql> select * from ceshi;
+------+---------------------+------+
| ID   | createDate          | name |
+------+---------------------+------+
|    1 | 2012-10-08 06:12:34 | NULL |
|    2 | 0000-00-00 00:00:00 | NULL |
|    3 | 2012-10-08 06:22:12 | NULL |
| NULL | 2012-10-08 06:23:01 |      |
+------+---------------------+------+
4 rows in set (0.01 sec)

看着好似插入的都没有问题,但是我们去统计name的数据量时候,这个时候又有问题了:

mysql> select count(name) from ceshi;
+-------------+
| count(name) |
+-------------+
|           1 |
+-------------+
1 row in set (0.00 sec)

结果只有一条,就是说,count函数把null(空值)给忽略掉了,而只统计出name=''的数据。

所以对于这样的语句即使是查询时候,采用null值过滤最好是使用is null 或者is not null 来作为条件。

综上:原来null(空值)不一定就等于''空字符,null(空值)也不一定为空。

解释为:在前面的那个createDate 字段插入null值的时候,在mysql数据库中,NULL对于一些特殊类型的列来说,其代表了一种特殊的含义,而不仅仅是一个空值。对于这些特殊类型的列, 一个是TimesTamp 类型,另外就是自增长列,而对于其它类型,插入null时候就显示的是null值。另外在第二次测试createDate 插入空字符串的时候显示0000-00-00 00:00:00,是由于mysql的非严格模式,对于输入的不合法给自动转换了,并给出警告。

而对于count统计函数,会自动忽略掉null值。于是想,为什么要这样做呢,原来这样也是有好处的,假如统计某个区域有手机号码的用户信息,我们只要使用count(手机号码)就可以自动过滤掉没有手机的人。

Mysql 中null与空字符串陷进相关推荐

  1. Oracle中Null与空字符串''的区别

    http://read.newbooks.com.cn/info/172049.html Oracle中Null与空字符串''的区别 来源:CSDN   作者:jsjzzh   发布时间:2007-1 ...

  2. mysql的字段空格是null_MySQL中NULL与空字符串 空格问题

    一些刚刚接触MySQL的孩子,经常会错误的认为NULL与空字符串' '是相同的.这看似是一件不重要的事情,但是在MySQL中,这两者是完全不同的.NULL是指没有值,而''则表示值是存在的,只不过是个 ...

  3. mysql null值和空格_MySQL中NULL与空字符串空格问题

    一些刚刚接触MySQL的孩子,经常会错误的认为NULL与空字符串' '是相同的.这看似是一件不重要的事情,但是在MySQL中,这两者是完全不同的.NULL是指没有值,而''则表示值是存在的,只不过是个 ...

  4. Django与SQL语言中——NULL与空字符串的区别

    SQL有指定空值的独特方式,它把空值叫做NULL. Null在数据库中表示 不知道的数据,主要有3种意思: 1)知道数据存在,但不知道具体值. 2)不知道数据是否存在. 3)数据不存在. 在SQL中, ...

  5. Oracle中Null与空字符串' '的区别

    含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除 ...

  6. Sqoop导入hive中null是空字符串还是‘null‘的问题(关注)

    Sqoop导入hive中null字符串处理为NULL 其中注意 这个是转为空字符串而不是'null'这种. 可以用ifnull转化的 这种就是'null'

  7. mysql 判断等于空字符串_mysql 判断null 和 空字符串

    1.在mysql中null 不能使用任何运算符与其他字段或者变量(函数.存储过程)进行运算.若使用运算数据就可能会有问题. 2.对null 的判断: 创建一个user表:id 主健 name 可以为空 ...

  8. 关于mysql使用 判断null 和 空字符串

    1.在mysql中null 不能使用任何运算符与其他字段或者变量(函数.存储过程)进行运算.若使用运算数据就可能会有问题. 2.对null 的判断: 创建一个user表:id 主健 name 可以为空 ...

  9. mysql 判断等于空字符串,MySql判断是否为null或空字符串

    MySql判断是否为null或空字符串 判断方法: if  ISNULL(aBegBalRule) || LENGTH(trim(aBegBalRule))<1 THEN ELSE END IF ...

最新文章

  1. 恕我直言,IDEA 的 Debug 调试,你可能只用了 10%
  2. caffe这个c++工程的目录结构
  3. 浅析C#中的套接字编程
  4. bobo老师机器学习笔记1.1 - 什么是机器学习
  5. Non-parseable POM C:\Users\admin\.m2\repository\org\springframework问题解决方案
  6. 冲击IPO:达达的负“重”上市之路
  7. 海军领域搜狗细胞词库
  8. Golang环境变量设置(二)--GOMODULEGOPROXY
  9. 2021十大杰出现货黄金交易平台排名
  10. vue2.0怎么渲染html,vue采坑之——vue里面渲染html 并添加样式
  11. OpenCV极坐标转换函数warpPolar的使用
  12. 什么是CDN什么是高防CDN
  13. 技嘉1080显卡体质测试软件,超频测试与总结 - 技嘉GTX1080 Xtreme Gaming显卡评测:创新的重峦式三风扇 - 超能网...
  14. 【汽车总线技术】CAN和CAN FD总线故障诊断
  15. oracle ebs ar 表,Oracle EBS R12 AR常用表
  16. java 二进制 包_如何用JAVA把内存里的二进制文件打包成ZIP包
  17. Pandas学习笔记之时间序列总结
  18. 模拟电路设计的九个级别 (ZT)!!!
  19. 一颗芯片的内部设计原理和结构
  20. QQ飞信程序漏洞?均遭美国监控

热门文章

  1. 阮一峰 react 系列教程
  2. SQL 开源替代品,诞生了!
  3. 好心情患者故事|致抑郁症患者:我们能被治愈,也值得被爱
  4. Spacebuilder 简介
  5. 计算机窗口移动不了怎么办,电脑鼠标拖不动文件怎么办 电脑鼠标拖动不灵敏如何解决...
  6. ZIP压缩包设置密码和删除密码
  7. jeecg导出excel设置样式XLS(03)与XLSX(07)
  8. 以点带面,全面解决现有问题的网吧路由器解决方案(转)
  9. mysql 时差查了13小时_MySQL查询检查如何获取时差
  10. 解神者php奥义高阶,《解神者》人物强度排行一览2021 什么人物输出最强