什么?你没有设置not null?赶紧准备准备跑路吧,同事开玩笑的说,幸好没有上线到正式啊......
![d142370893c5d5c1c7873ce4e5fe14e7.png](https://i-blog.csdnimg.cn/blog_migrate/3905da222e71838f5fa52970310d02c2.jpeg)
正文
平时我们开发经常会看到一些这样的SQL语句:
`name` varchar(30) NOT NULL DEFAULT '' COMMENT '名称',`nickname` varchar(30) NOT NULL DEFAULT '' COMMENT '昵称',`address` varchar(50) NOT NULL DEFAULT '' COMMENT '地址',
为什么会这样设置呢?同事看着前辈的代码若有所思,具体是什么原因呢?
1、占用空间区别
咱们先看看这条SQL:
![8473757489b13f300ff7e5d5032e2d7f.png](https://i-blog.csdnimg.cn/blog_migrate/0fb38cd87f755f2c21966bd930289383.jpeg)
可以看出空值('')的长度是0,是不占用空间的;而的NULL长度是NULL,其实它是占用空间的,占用空间的原因查了一下原因:
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.
NULL列需要行中的额外空间来记录它们的值是否为NULL。
2、不利于查询优化
如果查询中包含可为NULL的列,对MySQL来说更难优化,因为可为NULL的列会使索引、索引统计和值比较都更复杂。
当可为NULL的列被索引时,每个索引记录需要一个额外的字节,在MyISAM里面甚至可能导致固定大小的索引(例如只有一个整数列的索引)变成可变大小的索引。