MySQL Integer 0 vs NULL

t1qtbnec  于 2023-05-05  发布在  Mysql
关注(0)|答案(9)|浏览(121)

当使用整数列时,最好使用0NULL来表示无值。
例如,如果一个表有一个parent_id字段,而一个特定的条目没有父项,你会使用0还是NULL
我过去总是使用0,因为我来自Java世界(1.5之前)整数总是必须有一个值。
我主要是问有关表现的问题,我不太担心哪一个是“更正确”的选择。

1u4esq0p

1u4esq0p1#

最好使用NULL,原因有二:

  1. NULL用于表示字段没有值,这正是您试图建模的内容。
    1.如果您决定在将来添加一些引用完整性约束,则必须使用NULL
fumotvh3

fumotvh32#

如果可能,将列声明为NOT NULL。它通过更好地使用索引和消除测试每个值是否为NULL的开销,使SQL操作更快。您还保存了一些存储空间,每列一位。如果你真的需要在你的表中使用NULL值,那就使用它们。只要避免允许每列都有NULL值的默认设置即可。
MySQL - optimizing data size

9bfwbjaz

9bfwbjaz3#

使用NULL表示“无值”是完全正确的。0是整数的值,因此它有意义。NULL otoh字面意思是没有任何东西,所以没有值。
性能可能无关紧要,但是如果您学会正确使用NULL进行编码,使用NULL可能会更快一些。

hgc7kmma

hgc7kmma4#

在parent_id示例中,0是完全有效的,因为它代表'root'。在大多数情况下,NULL在逻辑上是“无值”的更好选择。
不过,据我所知,它对性能没有影响。

fdx2calv

fdx2calv5#

您不应该期望看到任何真实的生活中的性能差异

siotufzp

siotufzp6#

UNIQUE( id1, id2 )不能处理空值,因为它允许,例如1, null两次
另一方面,如果使用0,JOIN atable ON this.extID = atable.ID,则将执行连接(导致没有行被连接),而NULL将被忽略
无论如何,我建议总是使用“空值”(如0或空字符串)而不是NULL,除非空值与NULL有不同的含义
我也修改查询如下:JOIN atable ON this.extID = atable.id AND extID > 0防止执行无用的连接

uwopmtnx

uwopmtnx7#

我认为,如果你不希望0被用作值,那么可以用0来代替NULL。
例如,您的列是一个外键。由于外键通常不以0开始,而是以1开始,这意味着您不会期望将0用作值。
然后,您可以使用0表示“否”值状态。在联接中使用它将不匹配其他表上的任何列。因此,具有与NULL相同的效果。
但是如果你有一个列,其中的0实际上有一个含义。例如,一个数量字段。除此之外,你还需要表达和清空价值。例如,表示数量尚未输入。那么你需要一个NULL。
希望你能理解。

cidc1ykv

cidc1ykv8#

0仍然是整数列的有效值。因此,必须使用NULL并允许该列为null。
另外,如果你只对正数使用integer列,那么你可以对no值使用-1
在您的parent_id引用示例中,使用0,直到您确保没有以id 0开头的引用id为止。

disho6za

disho6za9#

如果你喜欢0,你不能使用外键,因为你不能在Mysql中存储id为0的项(如果是主项),所以唯一可能的方法是null

相关问题