ORACLE基本数据类型

ORACLE基本数据类型(亦叫内置数据类型 built-in datatypes)可以按类型分为:字符串类型、数字类型、日期类型、LOB类型、LONG RAW& RAW类型、ROWID & UROWID类型。讲叙字符串类型前,先要讲一下编码。字符串类型的数据可依编码方式分成数据库字符集(CHAR/VARCHAR2/CLOB/LONG)和国际字符集(NCHAR/NVARCHAR2/NCLOB)两种。数据库中的字符串数据都通过字符集将字符转换为数字后(二进制),才存储到数据块中。通过不同的编码集转换,即便是相同的字符,也可能会转换成不同的二进制编码。这也是产生乱码的原因。数据库的编码格式一般是在创建数据库时指定的。当然也可以修改数据库的编码。

查看数据库视图所包含的数据类型:SELECT * FROM DBA_TYPES WHERE OWNER IS NULL

字符类型

字符串数据类型还可以依据存储空间分为固定长度类型(CHAR/NCHAR) 和可变长度类型(VARCHAR2/NVARCHAR2)两种.
固定长度:是指虽然输入的字段值小于该字段的限制长度,但是实际存储数据时,会先自动向右补足空格后,才将字段值的内容存储到数据块中。

可变长度:是指当输入的字段值小于该字段的限制长度时,直接将字段值的内容存储到数据块中,而不会补上空白,这样可以节省数据块空间。

char(size [BYTE | CHAR]):默认1字节,n值最大为2000.定长字符串,会用空格填充来达到其最大长度。如非null的char(n)总是包含n个字节信息。可以指定它存储字节或字符,例如 CHAR(12 BYTYE) CHAR(12 CHAR)

nchar(n):默认1字符,最大存储内容2000字节.这是一个包含Unicode格式数据的定长字符串。它的最大长度取决于国家字符集。

varchar2(n BYTE/CHAR):最大长度必须指定,至少为1字节或者1字符,n值最大为4000.长度为n个字节的可变长度且非Unicode的字符数据。

varchar(n):VARCHAR数据类型目前是VARCHAR2的同义词

nvarchar2(n):最大长度必须指定,最大存储内容4000字节.包含n个字符的可变长度Unicode字符数据.

我和coffee
   char字段占n个字节的存储空间
   varchar字段占2*2+6=10个字节的存储空间
   nvarchar字段占8*2=16个字节的存储空间
  字段值只是英文可选择varchar2,而字段值存在较多的双字节(中文等)字符时使用nvarchar2

数字类型

NUMBER(p[,s]):1-22字节。P(Precison)取值范围1到38,S(Scale)取值范围-84到127.可以存放数据范围为10^130~10^126(不包含此值).正值s为小数位数,负值s表示四舍五入到小数点左部多少位。
123.89 
NUMBER(6,1) 123.9
NUMBER(6,-1) 120

INTEGER类型:INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。

BINARY_FLOAT:每个BINARY_FLOAT的值需要5个字节,其中有一长度字节。32位单精度浮点数类型。符号位1位,指数位8位,尾数位23位

BINARY_DOUBLE:9字节,其中有一长度字节。64位双精度浮点数类型

日期类型

DATE:其中总包含7个属性,包括:世纪、年、月、日期、小时、分钟和秒。一般占用7个字节的存储空间

TIMESTAMP [(fractional_seconds_precision)](时间戳):一个7字节或12字节的定宽日期/时间数据类型。fractional_seconds_precision为Oracle存储秒值小数部分位数,默认为6,可选值为0到9。没有时间区

TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE:使用UTC,这是TIMESTAMP类型的变种,它包含了时区偏移量的值

TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE:存时使用数据库时区,取时使用回话的时区

INTERVAL YEAR [(year_precision)] TO MONTH:包含年、月的时间间隔类型。year_precision是年字段的数字位数,默认为2,可取0至9

INTERVAL DAY [(day_precision)]TO SECOND [(fractional_seconds_precision)]:day_precision是月份字段的数字位数,默认为2,可取0至9

LOB大对象类型

CLOB:最大为(4GB-1)*数据库块大小,存储单字节或者多字节字符数据,支持事务处理。主要用于存储大型英文字符

NCLOB:最大为(4GB-1)*数据库块大小,存储Unicode数据。支持事务处理。主要用于存储大型非英文字符

BLOB:最大为(4GB-1)*数据库块大小,存储非结构化二进制数据,支持事务处理。可以被认为是没有字符集语义的比特流,主要存储图像、声音、视频等文件。

BFILE:LOB地址指向文件系统上的一个二进制文件,维护目录和文件名。不参与事务处理。只支持只读操作。

注意
       遇到大对象列时,插入空白构造函数。 字符型:empty_clob(),empty_nclob() 二进制型:empty_blob() 二进制文件类型:BFileName函数指向外部文件。 BFileName函数: BFileName(‘逻辑目录名’,‘文件名’); 逻辑目录名只能大写,因为数据词典是以大写方式存储。Oracle是区分大小写的。 在创建时,无需将BFileName函数逻辑目录指向物理路径,使用时才做检查二者是否关联。 例子: Insert Into tLob Values(1,'Gene',empty_clob(),empty_blob(),bfilename('MYDIR','IMG_0210.JPG'));

        可以在INSERT语句中使用这些初始化函数,初始化完成后,可以使用UPDATE语句
        向大对象列中加入数据。

Create table poem
(
     poem_writer varchar2(30), 
     poem_title     varchar2(30),
     poem_content nclob
);
Insert into poem(poem_writer,poem_title,poem_content) values('李白','静夜思',EMPTY_CLOB());
Update poem set poem_content='
              床前明月光,疑是地上霜。
              举头望明月,低头思故乡。
             '
where poem_title='静夜思';

其他类型

LONG:最大为2GB,变长类型,存储字符串。与VARCHAR2 或CHAR 类型一样,存储在LONG 类型中的文本要进行字符集转换.ORACLE建议开发中使用CLOB替代LONG类型。支持LONG 列只是为了保证向后兼容性。CLOB类型比LONG类型的限制要少得多。

RAW(n):最大2000字节,n为字节数,必须指定n。变长类型,字符集发生变化时不会改变值。

LONG RAW:最大为2GB,变长类型,不建议使用,建议转化为BLOB类型,字符集发生变化时不会改变值。

ROWID:10字节.代表记录的地址。显示为18位的字符串。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。ROWID它是一个伪列,它并不实际存在于表中

UROWID:UROWID(universal rowid)类型可以存储物理,逻辑或外来(non-Oracle)ROWID

你可能感兴趣的:(Orcale)