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

  • 相关阅读:
    Codeforces 1325D
    Codeforces 1325C
    Codeforces 1311F
    Codeforces 1311E
    Codeforces 1311D
    Codeforces 1316C
    JVM调试常用命令——jstack命令与线程状态(4)
    JVM调试常用命令——jstack命令与线程状态(3)
    JVM调试常用命令——jstack命令与Java线程栈(2)
    Java中类的比较与排序方法(应用Comparable接口与Comparator接口)
  • 原文地址:https://www.cnblogs.com/wzihan/p/14745408.html
Copyright © 2011-2022 走看看