SQL Server bit数据类型的困惑: ( 积分: 20 )

  • 主题发起人 主题发起人 ynduanlian
  • 开始时间 开始时间
Y

ynduanlian

Unregistered / Unconfirmed
GUEST, unregistred user!
Transact-SQL参考文档上说:<br>-------------------------------------<br>bit<br>整型数据&nbsp;1、0&nbsp;或&nbsp;NULL。<br><br>注释<br>不能对&nbsp;bit&nbsp;类型的列使用索引。&nbsp;<br><br>Microsoft&amp;reg;&nbsp;SQL&nbsp;Server&amp;#8482;&nbsp;优化用于&nbsp;bit&nbsp;列的存储。如果一个表中有不多于&nbsp;8&nbsp;个的&nbsp;bit&nbsp;列,这些列将作为一个字节存储。<br>---------------------------------------<br>我的问题是,bit有三种可能0、1或NULL,那如何用一个字节的一位来表示这一列的三种可能?比如这个字节第一位代表此bit类型的列,二进制0表示0值,二进制1表示1值,那如何表示NULL值?
 
isnull(Field1,&nbsp;0)<br>这样的话就只有0跟1两个值了。
 
数据库设计时,字段属性里有个&quot;是否允许为NULL&quot;<br>如果选择了它,会有另外的空间存储这个字段的值是否为NULL
 
上面的朋友,我是说它的内部存储机制,如何用一个二进位存储三种情况?
 
SQL&nbsp;Server内部用一个字节的一个二进位表示一个Bit类型的列,然而这个列可能有三种取值,那它内部怎么存储?
 
但是既然数据库内部用一个字节的一位来存储这个值,那它如何保存NULL这种情况?&nbsp;<br>数据文件(磁盘)或内存中的这一位该怎么表示?
 
null就是没有值。就不用存储了
 
我觉得是应该有内部每个记录里有个标示,是否为null
 
不光是bit没法直接表示,其他字段也没法表示,null不是0也不是'',他就是空,null应该不是直接存在本字段
 
呵呵,我参加过微软的技术大会,记得SQL&nbsp;Server中关于bit和NULL的存储方式。<br>&nbsp;&nbsp;SQL&nbsp;Server在内存中的每个记录数据块的头部利用一个“位图区域”存放该行数据列为<br>NULL的情况(比如,一张表有6个字段,那么&nbsp;110101&nbsp;就表示第3、5个字段的值为NULL)<br>——NULL不是在数据块主体的,呵呵。至于bit字段,则利用一个区域将所有bit类型的字段<br>进行集中,以节约空间。所以,对SQL&nbsp;Server来说,数据头决定了某列是否为NULL,数据区<br>域存放的是具体的值——包含NULL的三态bit就是这么来的。&nbsp;:)
 
接受答案了.
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
915
SUNSTONE的Delphi笔记
S
后退
顶部