MySQL 是一个开放源码的小型关联式数据库管理系统, 开发者为瑞典 MySQL AB 公司 MySQL 被广泛地应用在 Internet 上的中小型网站中由于其体积小速度快总体拥有成本低, 尤其是开放源码这一特点, 许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库
这篇文章主要介绍了 Mysql 中的 NULL 和 Empty String 知识, 需要的朋友可以参考下
最近新接触 Mysql, 昨天新建一个表用于存储表结构信息:
- create table tablist(TABLE_SCHEMA varchar(40),TABLE_NAME varchar(40),COLUMN_NAME varchar(40),COLUMN_TYPE varchar(40),
- IS_NULLABLE varchar(10),COLUMN_DEFAULT varchar(40),COLUMN_COMMENT varchar(1000),REMARK varchar(2000));
- insert into tablist(TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,COLUMN_COMMENT)
- select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,COLUMN_COMMENT
- from information_schema.`COLUMNS` where TABLE_SCHEMA='leo';
然后查询 tablist 表:
看看有哪些列没有 comment 于是:
select * from tablist where COLUMN_COMMENT is null;
查到的结果居然是 Empty set 不过从以上查询结果和 navicat 都能看出: null 值在结果集中显示的是'null'的单词, 而空字符串则显示为空
查过资料后发现 Mysql 的 null 值和空字符串是有区别的, 这里很奇怪 COLUMN_COMMENT 在经过 insert 之后, null 值居然变成了空字符串 (原因未明)
使用
select * from tablist where COLUMN_COMMENT = '';
查询正常
NULL columns require additional space in the row to record whether their values are NULL.For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.
在 Mysql 的 myisam 引擎中, null 值占用额外的存储空间 (1bit), 空字符串则完全不占用空间同时 null 值在 B 树索引中也无法被存储, 数据量大时会造成较严重的性能问题
两者的查询方式也不一样: null 值查询使用 is null/is not null 查询, 而 empty string 使用 = 或者!= 查询即可
来源: http://www.phperz.com/article/18/0216/362499.html