Database 空值如何存储在数据库中?
我很想知道空值是如何存储到数据库中的 这当然取决于数据库服务器,但我想大致了解一下Database 空值如何存储在数据库中?,database,null,Database,Null,我很想知道空值是如何存储到数据库中的 这当然取决于数据库服务器,但我想大致了解一下 第一次尝试: 假设服务器将未定义的值(可以是任何值)放入空值字段中 您是否可以非常幸运地使用 ...WHERE field = 'the undefined value (remember, could be anything...)' 第二次尝试: 服务器是否有标志或任何元数据指示此字段为空 然后服务器必须读取此元数据以验证字段 如果元数据指示空值,并且如果查询没有“字段为空”, 然后该记录被忽略 这似
第一次尝试: 假设服务器将未定义的值(可以是任何值)放入空值字段中 您是否可以非常幸运地使用
...WHERE field = 'the undefined value (remember, could be anything...)'
第二次尝试: 服务器是否有标志或任何元数据指示此字段为空 然后服务器必须读取此元数据以验证字段 如果元数据指示空值,并且如果查询没有“字段为空”, 然后该记录被忽略
这似乎太简单了……服务器通常使用元信息而不是神奇的值。所以这里有一个位置,指定字段是否为空
-AdamMySql使用第二种方法。它存储一个位数组(每列一个),其中包含每行的数据,以指示哪些列为空,然后将该字段的数据留空。我很确定这对所有其他数据库也是如此
第一种方法的问题是,您确定为数据选择的任何值都不会显示为有效数据吗?对于某些值(如日期或浮点数),这是正确的。对于其他人(如整数),这是错误的 在PostgreSQL上,它使用每列一位的可选位图(0为空,1为非空)。如果位图不存在,则所有列都不为空 这与数据本身的存储完全分离,但与行位于同一页上(因此,行和位图一起读取) 参考资料:
因此,正如前面所指出的,机制因DBMS的不同而不同。使用特殊值来指示NULL的问题在于,迟早会插入该特殊值。例如,它将被插入到一个表中,为不同的数据库服务器指定特殊的空指示符
| DBServer | SpecialValue |
+--------------+--------------+
| 'Oracle' | 'Glyph' |
| 'SQL Server' | 'Redmond' |
;-) 服务器确实有某种标志,并且服务器读取元数据以验证字段。仅仅因为该值为NULL,并不意味着该记录被忽略——原因很多(通常很复杂)。