数据库中的空值与NULL的区别以及python中的NaN和None

说实话,NULL这玩意儿挺磨人的。
我当年刚接触MySQL那会儿,老把NULL和空字符串搞混,结果调试了半天。
NULL说白了就是数据库层面的"不知道",不是0,也不是空格,更不是啥默认值。
想想看,如果用户填表的时候留了个空,数据库就得记下来是NULL,不是0,否则统计错了。

有意思的是NULL在计算里的表现。
我试过给NULL做个加法,比如NULL + 5 ,结果直接就变回NULL了。
这挺合理的,毕竟你把"不知道"往计算里一扔,结果当然还是不知道。
但count函数特別,count(NULL)会算1 ,count(' ')不会算。
我记得有次统计用户活跃度,把NULL当活跃用户算进去,老板当场拍桌子,说这统计有病。
这块我没亲自跑过,但数据我记得是X左右,但建议你核实。

Python处理NULL也很有意思。
导出MySQL数据成CSV的时候,NULL在文件里就是NULL,读进Python变成NaN(Not a Number)。
直接连数据库读的话,NULL对应None和pandas里的NaN(时间类型是NaT)。
空字符串倒是挺乖,直接被认出来是空字符串。
我有个项目用pandas处理数据,把NULL替换成平均值,结果发现那些本来该是0的数值全变成了平均值,当时也没想明白为啥。

说实话,NULL这玩意儿虽然烦,但用好了能省不少事儿。
比如统计时把NULL排除,避免数据污染。
但有时候又得把NULL当特殊值处理,这活儿就得靠经验了。
我当年写个报表,把NULL当0处理,结果被同事骂惨,说这报表跟耍赖似的。
可能有点偏激,但NULL这东西,用得不对就是耍赖。

mysql中的NULL记录和空值有什么区别

NULL这玩意儿啊,MySQL里有专门表示的。
比如你查个表,字段是INT,结果要是NULL,那肯定不是0啊,是MySQL自己弄的那个特殊标记。

逻辑运算的时候尤其要注意。
比如你写个SQL,2 AND NULL,结果就是NULL。
你想想,2 肯定不为0啊,但NULL就不一样了,它就代表"不知道",所以结果就是"不知道"。

空串跟NULL又不一样。
空串就是''这种,啥也没有。
PHP读的时候,空串可能就显示为空,或者干脆报错,我也记不清了。
但NULL不会,它就是NULL,是个特殊值。

所以编程的时候,自己得清楚数据库存了啥。
要是存的是NULL,别拿0去比较,肯定对不上。
这事儿踩坑过一次,就记住了。
以后一般不会再搞混。

MySQL中NULL和空值的区别 – 运维那点事

这就是坑,别将null值和零长度字符串混淆,它们在数据库中的行为截然不同。