关于一个值该不该default null的判定

背景:

设置了一个用户表 talent 列有学历ID、学历、姓名,请问我的学历ID是设置 int not null default 0 合适呢还是 int default null 合适呢?

参考:

《高性能MySQL》 - 尽量避免使用null:

a.  可为null值的列使得索引更加复杂,因为可为 null 值的列被索引,每个索引记录需要一个额外的字节  -- 我们不关注,多一个就多一个不差那点内存

b.  可为 null 值的列的值比较更为复杂,因为null值只能通过 is null 获取,对于 != 1 之类,null值也无法获取

  理解:我们本能的认为 null != 1 返回的是 true,所以我们 column != 1应该能获取到 column is null 的行记录才对,但是事实上:

           MySQL 执行  select if(null != 1,'true','false');  返回值是 false ; 也就是说 在MySQL之中与任何值的比较(即使是null)永远都不会为“真” - 《MySQL DBA修炼之道》

      

c  使用聚合函数时候,count,min,sum将忽略null值 ,例如

select count(degree_id) from user; //如果有一行的degreee_id为null那么将不会计算这一行进去

select count(*) from user;//这个则直接计数行为不是单独的列值

所以对于总数的计数不能依赖于一列可以为 null 的列

d 对于timestamp的列,如果插入null值将会插入当前日期和时间;

e 对于auto_increment的列插入null值将会插入序列中的下一个编号;

其实以上,我们总结不用 null 的最大原因还是:值比较变得麻烦

例子:

 

1 查找不方便,比如我们想查找非本科学历(ID 值为5)的候选人, 

select id,chnname,highdegree_id,highdegree_name from zp_talent where highdegree_id != 5 and id=460;

对于未填写学历的人比如 null 值我们无法获取,只能通过 is null 获取

但是本人使用 element ui开发,下拉框组件看到值为 0 的时候,会显示一个 0 值在输入框里面,显得很奇怪 ,所以我需要人工转一道:如果学历ID为0就转为空字符串;

而 default null 却不会有这样的烦恼;

I can see a bigger world.
原文地址:https://www.cnblogs.com/xuweiqiang/p/14687566.html