Oracle基本数据类型内部存储格式
来源:优易学  2011-9-22 19:31:49   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  char和varchar2
  字符类型数据通常是以数据库的字符集(单字节)存储的char固定长度的字符串,最多2000字符;内部代码:96 varchar2浮动长度字符串,最多4000字符内部代码:1为了能识别dump的输出文件,必须要知道他们存储的代码页。
  char在char类型的列中,所有的空字节被空格(代码32)填充长度固定由于char类型代码为96,长度固定,因此很容易分辨出那些是用来填充的空格
  varchar2 varchar2列中,将不用空格填充。
  长度不固定
  nchar和nvarchar2字符数据也可以使用国家字符集(多字节)设置存储nchar固定长度,最多2000字节内部代码:96 nvarchar2浮动长度,最多4000字节内部代码:1
  number数字类型内部存储是一个字节的变长阿拉伯数字数组数字类型有以下格式 < [length]>,sign bit/expornent,digit1,digit2,……,digit20内部代码:2注意的是,number和float有同样的内部特性。
  指数类型指数字节包含三个部分:符号位:是整个字节的最高位(128)
  如果是0,则数字是负数如果是1,则数字是正数或者0偏移量:总是65指数:范围为-65到62标示该数字100为基础的科学记数法如果指数是200=128+65+7,那么指数就是7,因此数据应该是大于100的7次方如果一个数字是服侍,指数也同样的计算,但是要从255翻转,例如,一个指数为7的负数的计算是:-(125+65+7)=-(200)=255-200=77偏移量使得负数的指数不需要使用别的字节来作为指数标志如果第一个字节大于128,那么数字是正的:exponent=first byte 128 -65=first bytes193如果第一个字节小于128,那么数字是负的:exponent=(255-first byte)-128-65=62-first byte
  digits大部分数字的最高位是digit1使用100作为基数(每一个数字是0-99之间)
  对于正数:对于每个digit使用进位(1…100)
  对于负数:不是使用进位,而是从101减基数标志102(0×66)是最后的数据库的进位中是没有0的,0标示数据结束。虽然现在该规则已经废除,但是为了兼容,还是保留。现在oracle通过计算长度来知道数据的结束。
  存储是基于矢量对照语法的。从左边开始,比较数据的大小直到:一个部分不同,在这种情况下,最低的字节决定最小数字一个数据已经完成,在这种情况下,这个是两个数字中的最小的。
  所有的数据都比较完成,在这种情况下,两个数字相等负数从101开始存储,因此比较下面的数字:4= <193,5>,3=<193,4>比较这些字节,+4大于+3.负数-4和-3.指数必须是62,如果值不是从101开始,则可能-4=<62,5>并且-3=<62,4>,这个时候,-4比 -3大,显然是错误的。但是从101开始以后,数字就变成了-4=<62,97>并且-3=<62,98>.现在-3是比-4大的。
  字节102附加在负数的后面,保证他们排序的正确性。比较数字-100 <61,100,102>和-115< 61,100,86,102>如果102不在这里,那么<61,100>和<61,100,86>将得到错误的结果,- 100比-115小。
  正数的例子:因为数字是基于100的,因此最大的数字是99.指数从-65到62,因此,oracle的number的范围为:1*100(-65)=1*10(-120)到99*100(62)+99*100(61)…… 无限接近1*10^(126)
  但是,因为最大的精度是38,oracle将对超出精度的数据进行round操作。如果数字的字节数超过21,oracle就会报溢出16进制也包括在这里面,因为在块dump中是一样的表现的要注意第二个字节是如何增加和减少的,数字是基于100的。

上一页  [1] [2] [3] [4] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训