其实要避免出现这些隐性的小bug很简单,只需要在设计数据库表的时候把每个字段都勾选为“不是null”即可。
一,字段默认为null不是可以节省空间开支吗?
对于很多初学者,可能会掉入这样一个误区,认为字段默认为null可以节省空间开支。其实这是错误的,因为在MySQL数据库中null值是需要占用空间的。
以下这段话是MySQL官方文档的描述:
For NULL tables, NULL columns require additional space in the row to record whether their values are NULL. Each NULL column takes one bit extra, rounded up to the nearest byte.
翻译过来就是:对于NULL表,NULL列需要在行中占用额外的空间来记录其值是否为NULL。每个NULL列需要一个额外的位,向上舍入到最近的字节。
二,所有字段都勾选上“不是null”有什么好处?
1:避免掉频繁的is null判断。
2:不使用null可以提高索引效率,比如在树形索引结构中将null也视作一般数据节点。
3:可以避免掉很多隐性bug,比如in、<、<>、!=、not in等负向条件查询在有null值的情况下返回的结果基本都是错的,只能采用is null或is not null进行判断。
最后总结一下:我们平时研发的大多数项目都是中小项目,所以不需要想太多,直接把所有字段都勾选为“不是null”即可。