1. NULL 值对于索引非常不友好。可空列被索引后,每条记录都需要一个额外的字节,还能导致MyISAM中固定大小的索引变成可变大小的索引。
  2. 使用 NULL 值可能导致查询结果的不确定性。例如,在查询中使用 NOT IN 或 != 等负向条件时,如果存在 NULL 值,查询结果也会为空。参考:MySQL 查询“不等于”时,如果值为 null 也会满足条件的解决办法。
  3. 对于程序员编写业务代码出现空指针的概率大大增加。
  4. 对于查询报表的情况下,NULL 值非常容易造成 SQL 编写后数据库不准确的情况。
  5. 如果列允许为 NULL,索引可能不存储 NULL 值,这可能导致查询结果不包含这些记录。
  6. 使用 COUNT() 函数时,NULL 值不参与统计,可能导致业务数据不准确。

字符串类型可以设置为空字符串,int 类型可以设置为 -1 或其他特殊标志。