Mysql 中null与空字符串陷进
前阵子在更新数据库时候碰见一个新增表的语句,发现插入的空值自动填充的值,很是费解,下面我们先来说说案例,以下是模仿的测试:
首先创建一个表: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与空字符串陷进相关推荐
- Oracle中Null与空字符串''的区别
http://read.newbooks.com.cn/info/172049.html Oracle中Null与空字符串''的区别 来源:CSDN 作者:jsjzzh 发布时间:2007-1 ...
- mysql的字段空格是null_MySQL中NULL与空字符串 空格问题
一些刚刚接触MySQL的孩子,经常会错误的认为NULL与空字符串' '是相同的.这看似是一件不重要的事情,但是在MySQL中,这两者是完全不同的.NULL是指没有值,而''则表示值是存在的,只不过是个 ...
- mysql null值和空格_MySQL中NULL与空字符串空格问题
一些刚刚接触MySQL的孩子,经常会错误的认为NULL与空字符串' '是相同的.这看似是一件不重要的事情,但是在MySQL中,这两者是完全不同的.NULL是指没有值,而''则表示值是存在的,只不过是个 ...
- Django与SQL语言中——NULL与空字符串的区别
SQL有指定空值的独特方式,它把空值叫做NULL. Null在数据库中表示 不知道的数据,主要有3种意思: 1)知道数据存在,但不知道具体值. 2)不知道数据是否存在. 3)数据不存在. 在SQL中, ...
- Oracle中Null与空字符串' '的区别
含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除 ...
- Sqoop导入hive中null是空字符串还是‘null‘的问题(关注)
Sqoop导入hive中null字符串处理为NULL 其中注意 这个是转为空字符串而不是'null'这种. 可以用ifnull转化的 这种就是'null'
- mysql 判断等于空字符串_mysql 判断null 和 空字符串
1.在mysql中null 不能使用任何运算符与其他字段或者变量(函数.存储过程)进行运算.若使用运算数据就可能会有问题. 2.对null 的判断: 创建一个user表:id 主健 name 可以为空 ...
- 关于mysql使用 判断null 和 空字符串
1.在mysql中null 不能使用任何运算符与其他字段或者变量(函数.存储过程)进行运算.若使用运算数据就可能会有问题. 2.对null 的判断: 创建一个user表:id 主健 name 可以为空 ...
- mysql 判断等于空字符串,MySql判断是否为null或空字符串
MySql判断是否为null或空字符串 判断方法: if ISNULL(aBegBalRule) || LENGTH(trim(aBegBalRule))<1 THEN ELSE END IF ...
最新文章
- 恕我直言,IDEA 的 Debug 调试,你可能只用了 10%
- caffe这个c++工程的目录结构
- 浅析C#中的套接字编程
- bobo老师机器学习笔记1.1 - 什么是机器学习
- Non-parseable POM C:\Users\admin\.m2\repository\org\springframework问题解决方案
- 冲击IPO:达达的负“重”上市之路
- 海军领域搜狗细胞词库
- Golang环境变量设置(二)--GOMODULEGOPROXY
- 2021十大杰出现货黄金交易平台排名
- vue2.0怎么渲染html,vue采坑之——vue里面渲染html 并添加样式
- OpenCV极坐标转换函数warpPolar的使用
- 什么是CDN什么是高防CDN
- 技嘉1080显卡体质测试软件,超频测试与总结 - 技嘉GTX1080 Xtreme Gaming显卡评测:创新的重峦式三风扇 - 超能网...
- 【汽车总线技术】CAN和CAN FD总线故障诊断
- oracle ebs ar 表,Oracle EBS R12 AR常用表
- java 二进制 包_如何用JAVA把内存里的二进制文件打包成ZIP包
- Pandas学习笔记之时间序列总结
- 模拟电路设计的九个级别 (ZT)!!!
- 一颗芯片的内部设计原理和结构
- QQ飞信程序漏洞?均遭美国监控
热门文章
- 阮一峰 react 系列教程
- SQL 开源替代品,诞生了!
- 好心情患者故事|致抑郁症患者:我们能被治愈,也值得被爱
- Spacebuilder 简介
- 计算机窗口移动不了怎么办,电脑鼠标拖不动文件怎么办 电脑鼠标拖动不灵敏如何解决...
- ZIP压缩包设置密码和删除密码
- jeecg导出excel设置样式XLS(03)与XLSX(07)
- 以点带面,全面解决现有问题的网吧路由器解决方案(转)
- mysql 时差查了13小时_MySQL查询检查如何获取时差
- 解神者php奥义高阶,《解神者》人物强度排行一览2021 什么人物输出最强