MySQL 中NULL和空值的区别 (转载 http://blog.sina.com.cn/s/blog_3f2a82610102v4dn.html)
平时我们在使用MySQL的时候,对于MySQL中的NULL值和空值区别不能很好的理解。注意到NULL值是未知的,且占用空间,不走索引,DBA建议建表的时候最好设置字段是NOT NULL 来避免这种低效率的事情的发生。
eg:
ERROR 1048
(23000): Column 'c' cannot be null
select *
from testaa;
| b
| c |
| aa
| |
|
|
|
| NULL
|
|
| NULL
|
|
| aafa
| fa |
select *
from testaa
where c
is not
null;
| b
| c |
| aa
| |
|
|
|
| NULL
|
|
| NULL
|
|
| aafa
| fa |
in set
(0.00
sec)
select *
from testaa
where c
<> '';
| b
| c |
| aafa
| fa |
in set
(0.00
sec)
select *
from testaa
where
c = '';
| b
| c |
| aa
| |
|
|
|
| NULL
| |
| NULL
| |
in set
(0.00
sec)
is null;
set (0.00 sec)
select *
from testaa
where b
is not
null;
| b
| c |
| aa
| |
|
|
|
| aafa
| fa |
in set
(0.00
sec)
select *
from testaa
where b
<> '';
| b
| c |
| aa
| |
| aafa
| fa |
in set
(0.00
sec)
select *
from testaa
where b
='';
| b
| c |
|
|
|
in set
(0.00
sec)
is null;
| b
| c |
| NULL
| |
| NULL
| |
select length(b),length(c) from testaa;
+-----------+-----------+
| length(b) |
length(c)
|
+-----------+-----------+
| 2 | 0 |
| 0 | 0 |
| NULL
| 0 |
| NULL
| 0 |
| 4 | 2 |
+-----------+-----------+
5 rows
in set
(0.00
sec)
select count(b),count(c) from testaa;
+----------+----------+
| count(b) |
count(c)
|
+----------+----------+
| 3 | 5 |
+----------+----------+
1 row
in set
(0.00
sec)
create table testbb ( a int primary key , b timestamp);
Query OK, 0 rows affected (0.07 sec)
show create table testbb;
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table
| Create
Table |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| testbb
| CREATE TABLE
`testbb` (
`a` int(11) NOT
NULL,
`b` timestamp NOT NULL
DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT
CHARSET=utf8 |
+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
insert into
testbb vales (1,null) ;
insert into
testbb values (2,'');
Query OK, 1 row affected, 1 warning (0.00 sec)
show warnings;
+---------+------+----------------------------------------+
| Level
| Code
| Message
|
+---------+------+----------------------------------------+
| Warning
| 1265
| Data
truncated for
column 'b'
at row 1
|
+---------+------+----------------------------------------+
select *
from testbb;
+---+---------------------+
| a | b |
+---+---------------------+
| 1 | 2014-08-15 14:32:10 |
| 2 | 0000-00-00 00:00:00 |
+---+---------------------+
2 rows
in set
(0.00
sec)
判断NULL
用IS NULL
或者 is
not null,SQL 语句函数中可以使用ifnull()函数来进行处理,判断空字符用
=''或者 <>''来进行处理
对于MySQL特殊的注意事项,对于timestamp数据类型,如果往这个数据类型插入的列插入NULL值,则出现的值是当前系统时间。插入空值,则会出现
'0000-00-00
00:00:00'
除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议,请往下看。
首先,我们要搞清楚“空值” 和 “NULL” 的概念:
1、空值是不占用空间的
2、MySQL中的NULL其实是占用空间的
所谓的NULL就是什么都没有,连\0都没有,\0在字符串中是结束符,但是在物理内存是占空间的,等于一个字节,而NULL就是连这一个字节都没
有。在数据库里是严格区分的,任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS NULL关键字。
数据库的字段ID设为NOT NULL, 仅仅说明该字段不能为NULL, 也就是说只有在
INSERT INTO table(ID) VALUES(NULL);
这种情况下数据库会报错,而
INSERT INTO table(ID) VALUES( ‘ ‘);
这不能说明是NULL, 数据库系统会根据ID设的缺省值填充,或者如果是自增字段就自动加一等缺省操作。
尽量避免NULL:应该指定列为NOT
NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化,而且对表索引时不会存储NULL值的,所以如果索引的字段可以为
NULL,索引的效率会下降很多。因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用0、一个特殊的值或者一个空串代替空值。
MySQL 中NULL和空值的区别 (转载 http://blog.sina.com.cn/s/blog_3f2a82610102v4dn.html)的更多相关文章
- MySQL 中NULL和空值的区别,索引列可以有空值或者null吗?
空值跟null的区别.mysql官方: “NULL columns require additional space in the row to record whether their values ...
- 【面试】MySQL 中NULL和空值的区别?
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 01 小木的故事 作为后台开发,在日常工作中如果要接触Mysql数据库,那么不可避免会遇到Mysql中的NULL和空值.那 ...
- MySQL 中NULL和空值的区别
平时我们在使用MySQL的时候,对于MySQL中的NULL值和空值区别不能很好的理解.注意到NULL值是未知的,且占用空间,不走索引,DBA建议建表的时候最好设置字段是NOT NULL 来避免这种低效 ...
- quartus ii13.0~16.0 调用uedit (转载http://blog.sina.com.cn/s/blog_6d5560f00102vax6.html)
转自 http://blog.sina.com.cn/s/blog_6d5560f00102vax6.html Quartus II 中的文本编辑软件不好用,比较习惯与UE(Uedit32/ultra ...
- mysql中null与“空值”的坑
https://blog.csdn.net/u014743697/article/details/54136092
- GnuDIP制作动态域名服务器(DDNS Server)_转载http://blog.sina.com.cn/s/blog_4d4c23530100rlfj.html
这个阶段在做DDNS,虽然有dyndns和tzo两个免费的国外的DDNS服务器(支持免费用户注册使用),但是公司需求中要有GnuDIP这种服务.于是只能自己制作DDNS服务器,颇费功夫,于是想把这段记 ...
- nginx、fastCGI、php-fpm关系梳理(转载 http://blog.sina.com.cn/s/blog_6df9fbe30102v57y.html)
前言: Linux下搭建nginx+php+memached(LPMN)的时候,nginx.conf中配需要配置fastCGI,php需要安装 php-fpm扩展并启动php-fpm守护进程, ...
- 基本滤波算法比较 (转载http://blog.sina.com.cn/s/blog_69f2aa5a01014du5.html)
最近在做关于数据采集方面的东西,这就不免涉及到了滤波的算法,在网上找到了关于几种算法的比较. 数字滤波方法有很多种,每种方法有其不同的特点和使用范围.从大的范围可分为3类. 1.克服大脉冲干扰的数字滤 ...
- EFDC主控文件efdc.inp文件的xml格式化处理——转载http://blog.sina.com.cn/s/articlelist_1584892573_0_1.html
在对EFDC模型进行系统集成时,虽然可以通过一行一行读来进行解析处理,但那将是一个繁琐的工作.我们经过xml格式化处理后,再经xsd转成Dataset类对象,那么整个主控文件就是一个数据库表集合,对其 ...
随机推荐
- GCD的简单介绍
一)GCD 的使用方式 dispatch_async(dispatch_queue_t queue, dispatch_block_t block); async表明运行方式 queue则是你把任务交 ...
- zepto源码--compact、flatten、camelize、dasherize、uniq--学习笔记
1.compact 删除数组中的空元素(不是空字符串).undefined.null 在定义变量时,定义过filter = emptyArray.filter,即调用javascript原生的数组处理 ...
- php--yii2框架错误提示
if($code!=200){ $user=new UserAuth(); $user->mobile=$register['mobile']; $user->password=md5($ ...
- ADO.NET中主要对象
ADO.NET是什么? ADO.NET是.Net平台提供和数据库交互的类库集,我们可以通过它对SQLSERVER,XML,Oracle等这样的数据源进行访问. 应用程序可以使用ADO.NET链接到数据 ...
- documentElement和ownerDocument和ownerElement
1.document.documentElement是指文档根节点----HTML元素 2.element.ownerDocument是指当前元素所在的文档对象----document 3.attrO ...
- JMeter学习-008-JMeter 后置处理器实例之 - 正则表达式提取器(一)概述及简单实例
上文我们讲述了如何对 HTTP请求 的响应数据进行断言,以判断响应是否符合我们的预期,敬请参阅:JMeter学习-007-JMeter 断言实例之一 - 响应断言 那么我们如何获取 HTTP请求 响应 ...
- MySQL管理之道:性能调优、高可用与监控内置脚本
MySQL管理之道:性能调优.高可用与监控内置脚本 随书附送脚本 keepalive配置文件和脚本开源工具pssh批量管理服务器(python) 下载地址 http://files.cnblogs.c ...
- BI如何让企业管理从信息化迈向智能化 ——暨珠海CIO协会成立大会圆满召开
2016年8月27日,珠海CIO协会成立大会在珠海度假村酒店成功举办.此次会议由奥威软件等数家公司共同协办.珠海市信息协会秘书长周德元先生.广东省首席信息官协会秘书长周庆林先生.珠海市首席信息官协会会 ...
- Centos php项目发布问题
LAMP环境,项目运行错误日志路径:/var/log/httpd 错误日志例如: [Sat Jul :: ] [error] [client , referer: http://192.168.100 ...
- matlab将多条曲线绘制在一起
figure; hold on; : plot(x(i,:),y(i,:)); end x=:*pi); hold on : y=sin(x+i*pi/)+exp(x/); plot(x,y, -(] ...