zoukankan      html  css  js  c++  java
  • ORACLE 数据类型占用的字节数

    数据类型 参数 描写
    char(n) n=1 to 2000字节                     定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节)
    varchar2(n)                              n=1 to 4000字节 可变长的字符串,具体定义时指明最大长度n,
    这种数据类型可以放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接管的字符集标准)中的所有符号。
    如果数据长度没有到达最大值n,Oracle 8i会依据数据大小主动调节字段长度,
    如果你的数据前后有空格,Oracle 8i会主动将其删去。VARCHAR2是最常用的数据类型。
    可做索引的最大长度3209。

    number(m, n)   

    m=1 to 38
    n=-84 to 127
    可变长的数值列,容许0、正值及负值,m是所有有效数字的位数,n是小数点以后的位数。
    如:number(5,2),则这个字段的最大值是99,999,如果数值越过了位数限制就会被截取多余的位数。
    如:number(5,2),但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。
    如:number(3,0),输入575.316,真正保存的数据是575。
    date 从公元前4712年1月1日到公元4712年12月31日的所有合法日期,
    Oracle 8i其实在内部是按7个字节来保存日期数据,在定义中还包含小时、分、秒。
    缺省格局为DD-MON-YY,如07-11月-00 表示2000年11月7日。
    long 可变长字符列,最大长度限制是2GB,用于不须要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。
    long是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
    raw(n) n=1 to 2000 可变长二进制数据,在具体定义字段的时候必需指明最大长度n,Oracle 8i用这种格局来保存较小的图形文件或带格局的文本文件,如Miceosoft Word文档。
    raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
    long raw 可变长二进制数据,最大长度是2GB。Oracle 8i用这种格局来保存较大的图形文件或带格局的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。
    在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
    blob
    clob
    nclob
    三种大型对象(LOB),用来保存较大的图形文件或带格局的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB。
    LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。
    可以实行读取、存储、写入等特别操作。
    bfile 在数据库外部保存的大型二进制对象文件,最大长度是4GB。
    这种外部的LOB类型,通过数据库记载变革情况,但是数据的具体保存是在数据库外部进行的。
    Oracle 8i可以读取、查询BFILE,但是不能写入。
    大小由操作系统决议。

    类型如下:
    字段类型 中文说明 限制条件 其它说明
    CHAR 固定长度字符串 最大长度2000 bytes
    VARCHAR2 可变长度的字符串 最大长度4000 bytes 可做索引的最大长度749
    NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes
    NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes
    DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS)长度7 bytes 无千虫问题
    LONG 超长字符串 最大长度2G(231-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

  • 相关阅读:
    Balanced Binary Tree
    Convert Sorted List to Binary Search Tree
    Convert Sorted Array to Binary Search Tree
    Binary Tree Zigzag Level Order Traversal
    Validate Binary Search Tree
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Maximum Depth of Binary Tree
    如何把U盘的两个盘或者多个盘合成一个
    bugku 想蹭网先解开密码
  • 原文地址:https://www.cnblogs.com/wzihan/p/14745408.html
Copyright © 2011-2022 走看看