NULL和空字符串的区别
相信很多用了MySQL
很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问:
- 字段类型是
NOT NULL
,为什么可以插入空值? NOT NULL
的效率比NULL
高?- 判断字段不为空的时,到底要
select * from table where column <>
还是要用select * from table wherecolumn is not null
呢?
带着上面几个疑问,我们来深入研究一下NULL 和 NOT NULL
到底有什么不一样。
首先,我们要搞清楚“空字符串” 和 “NULL” 的概念:
-
空值是不占用空间的
。 - MySQL中的
NULL是占用空间的
打个比方来说,你有一个杯子,空值代表杯子是真空的,NULL代表杯子中装满了空气,虽然杯子看起来都是空的,但是区别是很大的。
注意事项:
- 在进行
count()
统计某列的记录数的时候,如果采用的NULL
值,系统会自动忽略掉,但是空值是会进行统计到其中的。 - 判断
NULL
用IS NULL
或者IS NOT NULL
,SQL
语句函数中可以使用ifnull()
函数来进行处理,判断空字符用=''
或者<>''
来进行处理 - 对于
MySQL
特殊的注意事项,对于timestamp
数据类型,如果往这个数据类型插入的列插入NULL
值,则出现的值是当前系统时间。插入空值,则会出现0000-00-00 00:00:00
- 对于空值的判断到底是使用
is null
还是=''
要根据实际情况来进行区分。