Navicat 博客

比较关系数据库中的 Null、零和空白字符串的语义 2020 年 9 月 8 日,由 Robert Gravelle 撰写

通常,数据库开发人员和管理员经常在其数据库表中互换使用 Null、零和空白字符串。不幸的是,因为 Null、零和空白字符串在关系数据库(RDBMS)中分别表示不同的内容。因此,错误地使用这些值或选择错误的值可能会对数据库和依赖该值的应用程序操作产生巨大影响。在今天的文章中,我们将探讨如何在数据库设计和一般使用中更好地利用 Null、零和空白字符串。

什么是 Null?

Null 值在关系数据库和编程语言中都有悠久的历史。它被设计为一种特殊的值,表示故意缺少任何值。这样,可以将其分配给任何可以为 null 的列。若要将列指定可以为 null ,只需包含 NULL 关键字,或将其省略,因为默认情况下列可以为 null

CREATE TABLE table_name 
(  
  column1 datatype [ NULL | NOT NULL ], 
  column2 datatype [ NULL | NOT NULL ], 
  ... 
); 

Navicat 的表设计器显著简化表的创建。在 Navicat 中,若要指定一列不能包含 NULL 值,请选中不是 null 复选框:

Not_null_column (148K)

在表网格视图中,NULL 值表示为 (null):

customers_table (202K)

就语义而言,缺少的值告诉我们不知道它是什么。简而言之,Null 可能表示“???”。稍后我们将看到,零或空白字符串都不是这种情况。

零值

零(0)值是一个实数,在世界各地的其他术语都有这个含义,包括 naught(英国)、naught(美国)、nil、zilch、zip、nada、scratch 和 goose egg。它的值可以被认为是“无”。假设我们有一个信用额度列。在这种情况下,值为 0.00 表示客户没有信用额度。如果该列可以为空,则 NULL 值表示我们不知道客户的信用额度是多少。在第一个例子中,我们知道客户的信用额度是零。

在 Navicat 中,我们可以通过“默认”下拉菜单设置列的默认值:

creditLimit_column (26K)

请注意,NULL 是第一个选项。

揭开空白字符串的面纱

与零非常相似,空白字符串("")与 NULL 值的不同之处在于,前者明确表示该值被设置为空,而 NULL 则表示未提供该值或该值是未知。例如,假设我们有一个存储手机号码的列。空值表示此人没有手机,而 NULL 表示此人未提供电话号码。这是两种截然不同的解释!

总结

理解 Null、零和空白字符串的语义对数据库开发人员和管理员至关重要,因为不正确地使用它们或选择错误的值可能会对与之交互的数据库和应用程序操作产生巨大影响。

为此,Navicat 数据库开发和管理客户端通过提供“默认”下拉列表并在数据库表中明确表示 Null 来方便你使用 Null、零和空白字符串。

Navicat 文章
频道条目
分享
文章归档