NULL如何存储在数据库中?

Luc*_*c M 10 database null

我很想知道如何将NULL存储到数据库中?

它肯定取决于数据库服务器,但我想对它有一个大致的想法.


第一次尝试:

假设服务器将未定义的值(可能是任何值)放入字段中以获取NULL值.

你能非常幸运并用它来检索NULL值吗?

...WHERE field = 'the undefined value (remember, could be anything...)'
Run Code Online (Sandbox Code Playgroud)

第二次尝试:

服务器是否有某个标志或任何元数据表明此字段为NULL?

然后,服务器必须读取此元数据以验证该字段.

如果元数据指示NULL值,并且查询没有"field IS NULL",则忽略该记录.


看起来太容易了......

Tho*_*Low 9

MySql使用第二种方法.它存储一个位数组(每列一个),每行包含数据,以指示哪些列为空,然后将该字段的数据留空.我很确定这对所有其他数据库也是如此.

第一种方法的问题是,您确定为数据选择的任何值都不会显示为有效数据吗?对于某些值(如日期或浮点数),这是真的.对于其他人(如整数),这是错误的.


Ces*_*arB 5

在 PostgreSQL 上,它使用一个可选的位图,每列一位(0 为空,1 不为空)。如果位图不存在,则所有列都不为空。

这与数据本身的存储完全分开,但与行在同一页上(因此行和位图一起读取)。

参考: