我正在使用 Postgres。val text NULL CHECK(val <> '')
使用(or varchar
) 和之间的存储或性能是否有任何显着差异val text NOT NULL
?文本不能为空。因此,空文本可以作为未设置的标记。但是,例如根据存储有什么不同吗?
我知道,我用空文本失去了 NULL 魔法,但这没关系。另一方面,我可以更轻松地导入应用程序,因为我不必处理NULL
. 它只是串入,串出。
我正在使用 Postgres。val text NULL CHECK(val <> '')
使用(or varchar
) 和之间的存储或性能是否有任何显着差异val text NOT NULL
?文本不能为空。因此,空文本可以作为未设置的标记。但是,例如根据存储有什么不同吗?
我知道,我用空文本失去了 NULL 魔法,但这没关系。另一方面,我可以更轻松地导入应用程序,因为我不必处理NULL
. 它只是串入,串出。
text
和之间没有性能差异varchar
。您的第一列定义没有多大意义:要么将缺失值表示为空字符串或 NULL,因此要么使用
或与
空字符串需要比 NULL 值稍多的存储空间,但这不应该是决定因素。
我的建议是您根据缺失或空字符串的含义做出决定:
如果你想表达“我知道这个值是空的”,那么使用空字符串
如果你想表达“我不知道值是什么,或者这个属性在这一行没有意义”,用NULL
但是不要在不考虑查询的情况下做出决定。如果查询是“有多少行具有该属性集”,则使用 NULL 更有意义,因为您可以像这样查询:
而不是
另一方面,如果您想知道哪些行的属性设置为“xyz”或根本没有设置,空字符串会更好:
相对