【发布时间】:2011-01-12 05:54:57
【问题描述】:
我正在使用 Oracle 数据库。在数据库级别,当您将列值设置为 NULL 或 ''(空字符串)时,在这两种情况下获取的值都是 NULL。是否可以将''(空字符串)作为非NULL值存储在数据库中?
我执行这个
UPDATE contacts SET last_name = '' WHERE id = '1001';
commit;
SELECT last_name, ID FROM contacts WHERE id ='1001';
LAST_NAME ID
------------ ------
null 1001
是否可以将 last_name 存储为非 NULL 空字符串 ('')?
【问题讨论】:
-
当然正确的做法是将未知值存储为 null 而不是空字符串。
-
空字符串是有效值。它不是一个未知值。 null 告诉我们用户不知道此联系人的姓氏,因此如果可能,我们必须从 LDAP 获取姓氏。空字符串告诉我们用户故意删除了此联系人的 last_name,因此它不是未知值。它有一个空字符串的定义值,它不同于代表未知值的 null。
-
深知 Oracle 将 '' 等同于 NULL 的历史问题,并且有点同意,但如果您想要存储 '' 的唯一原因是告诉用户删除了一个值,那就是为什么你有日志或日志表。换句话说,避免设计需要具有特殊含义的魔法值。