在 MySQL 表设计中,对于可能为空的字段,业界的最佳实践通常是:尽量设置为 并指定默认值(如 或 )。除非在业务逻辑上,该字段的“未知(Unknown)”状态与“零/空(Zero/Empty)”状态有明确的语义区别,才使用 。 下面从 查询层面、索引层面 以及 实际业务场景 三个维度为您详细拆解它们的区别: --- 一、 查询层面的区别(逻辑与计算) 在查询层面, 会引入三值逻辑(True, False, Unknown),这会极大增加 SQL 编写的复杂度和出错概率。 1. 比较操作符陷阱 NULL:你不能用 或 来判断 。 永远返回 False(严格说是 Unknown)。必须使用 或 。 DEFAULT:正常使用 或 即可。 2. 聚合函数的差异 COUNT(): 会忽略值为 的行;而如果使用默认值 或 , 会将其统计在内。(注意: 都会统计)。 SUM() / AVG():遇到 时会忽略该行。如果所有行都是 ,结果会返回 而不是 0,这往往会导致应用程序空指针异常(NPE)。 3. 字符串与数学运算 字符串拼接: 的结果是 。如果不小心,一条记录里只要有一个字段是 ,...