ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORACLE 数据类型占用的字节数

ORACLE 数据类型占用的字节数

原创 Linux操作系统 作者:zhl_shanghai 时间:2012-03-01 15:07:05 0 删除 编辑

数据库类型如下: 
   
 
字段类型 中文说明    限制条件         其它说明
   
  CHAR    
固定长度字符串 最大长度
2000   bytes          
  VARCHAR2  
可变长度的字符串 最大长度4000   bytes    可做索引的最大长度
749    
  NCHAR   
根据字符集而定的固定长度字符串 最大长度
2000   bytes          
  NVARCHAR2  
根据字符集而定的可变长度字符串 最大长度
4000   bytes          
  DATE    
日期(日--年)  DD-MM-YYHH-MI-SS)长度7 bytes  无千虫问题
   
  LONG    
超长字符串 最大长度2G231-1 足够存储大部头著作
   
  RAW     
固定长度的二进制数据 最大长度2000   bytes    可存放多媒体图象声音等
   
  LONG RAW  
可变长度的二进制数据 最大长度2G  同上
   
  BLOB    
二进制数据 最大长度
4G        
  CLOB    
字符数据 最大长度
4G        
  NCLOB   
根据字符集而定的字符数据 最大长度
4G        
  BFILE   
存放在数据库外的二进制数据 最大长度
4G        
  ROWID   
数据表中记录的唯一行号  10   bytes   ********.****.****格式,*0
1    
  NROWID  
二进制数据表中记录的唯一行号 最大长度
4000   bytes    
  NUMBER(P,S)  
数字类型  P为整数位,S为小数位   

NUMBER最多占用22个字节,最大可以保存38个十进制位.

 
 
--------------------------------------------------------------------------------------------------------------------------------------------
 
Date(长度 7    类型 12)

col dump_date form. a35
col real_date form. a35
select dump(last_ddl_time) dump_date,
      to_char(last_ddl_time,'yyyy-mm-dd hh24:mi:ss') real_date
  from user_objects
where rownum=1;

DUMP_DATE                           REAL_DATE
----------------------------------- ---------------------
Typ=12 Len=7: 120,102,4,13,16,48,53 2002-04-13 15:47:52
世纪 120 - 100 = 20 世纪和年份加100后存储
年份 102 - 100 = 2
月份 4 月份和日期按原值存储
日期 13
小时 16 - 1 = 15 时间均加1后存储
分钟 48 - 1 = 47
秒 53 - 1 = 52

   


--------------------------------------------------------------------------------

Number(类型  2)

<[长度]>,符号位/指数 数字1,数字2,数字3,......,数字20

正数:指数=数字1 - 193 (最高位为1是代表正数)
负数:指数=62 - 第一字节

数字1是最高有效位

正数:加1存储
负数:被101减,如果总长度小于21个字节,最后加一个102(是为了排序的需要)

所存储的数值计算方法为:

把下面计算的结果加起来:

每个数字乘以100^(指数-N)    (N是有效位数的顺序位,第一个有效位的N=0)

例:

select dump(123456.789) from dual;

DUMP(123456.789)
-------------------------------
Typ=2 Len=6: 195,13,35,57,79,91   
指数 195 - 193 = 2
数字1 13 - 1 = 12 *1002-0 120000
数字2 35 - 1 = 34 *1002-1 3400
数字3 57 - 1 = 56 *1002-2 56
数字4 79 - 1 = 78 *1002-3 .78
数字5 91 - 1 = 90 *1002-4 .009
  123456.789

select dump(-123456.789) from dual;

DUMP(-123456.789)
----------------------------------
Typ=2 Len=7: 60,89,67,45,23,11,102
指数 62 - 60 = 2(最高位是0,代表为负数)
数字1 101 - 89 = 12 *1002-0 120000
数字2 101 - 67 = 34 *1002-1 3400
数字3 101 - 45 = 56 *1002-2 56
数字4 101 - 23 = 78 *1002-3 .78
数字5 101 - 11 = 90 *1002-4 .009
  123456.789(-)

  现在再考虑一下为什么在最后加102是为了排序的需要,-123456.789在数据库中实际存储为

  60,89,67,45,23,11

  而-123456.78901在数据库中实际存储为

  60,89,67,45,23,11,91

  可见,如果不在最后加上102,在排序时会出现-123456.789<-123456.78901的情况。

 

--------------------------------------------------------------------------------------------------------------------------------------------

number类型的数字存储所占用的空间,是跟实际数字的大小有关系的,并不是固定的长度!

 

dump返回的那一串东西分别表示的是什么意思?

typ  数据类型
len  
数据长度
后面紧跟的是真实数据存储

比如
SQL> select dump(0) from dual;

DUMP(0)
----------------
Typ=2 Len=1: 128

SQL>
2
表示number类型
len
表示1字节
128
表示字节bit  1000 0000   --->  Ox  80

 

 

 

SQL> select dump(1111111) from dual;

DUMP(1111111)
---------------------------
Typ=2 Len=5: 196,2,12,12,12

SQL> select dump(1111111111111) from dual;

DUMP(1111111111111)
------------------------------------
Typ=2 Len=8: 199,2,12,12,12,12,12,12

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22840716/viewspace-717448/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-11-08

  • 博文量
    1
  • 访问量
    1071