简述Oracle基本数据类型

来源:互联网 发布:淘宝买腾讯会员靠谱吗 编辑:程序博客网 时间:2024/06/06 18:43

Oracle基本数据类型分类

总共6大类型,具体如下:

  • 字符串类型
  • 数字类型
  • 日期类型
  • LOB类型
  • LONG RAW & RAW 类型
  • ROWID & UROWID 类型

每个类型下详细的数据类型

1. 字符串类型

  • 固定长度类型

    • CHAR

      • CHAR类型,定长字符串,会用空格填充来达到其最大长度。非NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2,000字节的信息。如果创建表时,不指定CHAR长度,则默认为1。另外你可以指定它存储字节或字符,例如 CHAR(12 BYTYE) CHAR(12 CHAR).一般来说默认是存储字节,你可以查看数据库参数
        NLS_LENGTH_SEMANTICS的值。
    • NCHAR

      • 这是一个包含UNICODE格式数据的定长字符串。NCHAR字段最多可以存储2,000字节的信息。它的最大长度取决于国家字符集。另外查询时,如果字段是NCHAR类型,则需要如下书写

        SELECT translated_description FROM product_descriptions WHERE translated_name = N’LCD Monitor 11/PM’;

  • 可变长度类型

    • VARCHAR2
      • 变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多可以存储4,000字节的信息
    • NVARCHAR2
      • 这是一个包含UNICODE格式数据的变长字符串。 NVARCHAR2最多可以存储4,000字节的信息
  • 补充说明

    • 定长或变长
      所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;有var前缀的,表示是实际存储空间是变长的,比如varchar2,nvarchar2变长字符数据则不会以空格填充。

    • Unicode或非Unicode
      数据库中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,容易造成混乱,导致读取出来的字符串是乱码。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。而前缀n就表示Unicode字符,比如nchar,nvarchar2,这两种类型使用了Unicode字符集。

2. 数字类型

  • NUMBER类型

    • NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10^130~10^126(不包含此值),需要1~22字节(BYTE)不等的存储空间。

    • P 是Precison的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过38个有效数字

    • S是Scale的英文缩写,可以使用的范围为-84~127。Scale为正数时,表示从小数点到最低有效数字的位数,它为负数时,表示从最大有效数字到小数点的位数

  • INTEGER类型

    • INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。
  • 浮点数类型(Oracle 数据库提供了专为浮点数的两种数值数据类型:)

    • BINARY_FLOAT
      • BINARY_FLOAT 是 32 位、 单精度浮点数字数据类型。可以支持至少6位精度,每个 BINARY_FLOAT 的值需要 5 个字节,包括长度字节。
    • BINARY_DOUBLE
      • BINARY_DOUBLE 是为 64 位,双精度浮点数字数据类型。每个 BINARY_DOUBLE 的值需要 9 个字节,包括长度字节。
  • FLOAT类型

    • FLOAT类型也是NUMBER的子类型。

    • Float(n),数 n 指示位的精度,可以存储的值的数目。N 值的范围可以从 1 到 126。若要从二进制转换为十进制的精度,请将 n 乘以 0.30103。要从十进制转换为二进制的精度,请用 3.32193 乘小数精度。126 位二进制精度的最大值是大约相当于 38 位小数精度。

3. 日期类型

  • DATE类型

    • DATE是最常用的数据类型,日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息,但是日期数据类型具有特殊关联的属性。为每个日期值,Oracle 存储以下信息: 世纪、 年、 月、 日期、 小时、 分钟和秒。一般占用7个字节的存储空间。
  • TIMESTAMP类型

    • 这是一个7字节或12字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒,带小数秒的TIMESTAMP在小数点右边最多可以保留9位
  • TIMESTAMP WITH TIME ZONE类型

    • 这是TIMESTAMP类型的变种,它包含了时区偏移量的值
  • TIMESTAMP WITH LOCAL TIME ZONE类型
  • INTERVAL YEAR TO MOTH
  • INTERVAL DAY TO SECOND

4. LOB类型

内置的LOB数据类型包括BLOB、CLOB、NCLOB、BFILE(外部存储)的大型化和非结构化数据,如文本、图像、视屏、空间数据存储。

  • BLOB类型

    • 它存储非结构化的二进制数据大对象,它可以被认为是没有字符集语义的比特流,一般是图像、声音、视频等文件。BLOB对象最多存储(4 gigabytes-1) * (database block size)的二进制数据。
  • CLOB类型

    • 它存储单字节和多字节字符数据。支持固定宽度和可变宽度的字符集。CLOB对象可以存储最多 (4 gigabytes-1) * (database block size) 大小的字符
  • NCLOB类型

    • 它存储UNICODE类型的数据,支持固定宽度和可变宽度的字符集,NCLOB对象可以存储最多(4 gigabytes-1) * (database block size)大小的文本数据。
  • BFILE类型

    • 二进制文件,存储在数据库外的系统文件,只读的,数据库会将该文件当二进制文件处理

5. RAW & LONG RAW类型

  • LONG类型

    • 它存储变长字符串,最多达2G的字符数据(2GB是指2千兆字节, 而不是2千兆字符),与VARCHAR2 或CHAR 类型一样,存储在LONG 类型中的文本要进行字符集转换。ORACLE建议开发中使用CLOB替代LONG类型。支持LONG 列只是为了保证向后兼容性。CLOB类型比LONG类型的限制要少得多。

    • LONG类型的限制如下:

      1. 一个表中只有一列可以为LONG型。
      2. LONG列不能定义为主键或唯一约束。
      3. 不能建立索引。
      4. LONG数据不能指定正则表达式。
      5. 函数或存储过程不能接受LONG数据类型的参数。
      6. LONG列不能出现在WHERE子句或完整性约束。(除了可能会出现NULL和NOT NULL约束)
  • LONG RAW类型

    • 能存储2GB 的原始二进制数据(不用进行字符集转换的数据)
  • RAW类型

    • 用于存储二进制或字符类型数据,变长二进制数据类型,这说明采用这种数据类型存储的数据不会发生字符集转换。这种类型最多可以存储2,000字节的信息

6. ROWID & UROWID类型

ROWID是ORACLE中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。ROWID它是一个伪列,它并不实际存在于表中。它是ORACLE在读取表中数据行时,根据每一行数据的物理地址信息编码而成的一个伪列。所以根据一行数据的ROWID能找到一行数据的物理地址信息。从而快速地定位到数据行。数据库的大多数操作都是通过ROWID来完成的,而且使用ROWID来进行单记录定位速度是最快的。

参考:http://www.cnblogs.com/kerrycode/archive/2013/08/17/3265120.html