Oracle --- 数据类型
一)数据类型的分类
Oracle支持的数据类型可以分为四个基本种类:字符数据类型、数字数据类型、日期数据类型以及表示其它数据的数据类型。
属于字符数据类型的有: char/varchar/varchar2/nvarchar/nvarchar2/long
属于数字数据类型的有: number
属于日期数据类型的有: date/timestamp
属于其它数据类型的有: raw/long raw/rowid/CLOB/NCLOB/BLOB/BFILE
二)字符数据类型
1)char char的长度是固定的,比如说,你定义了char(20),即使你你插入abc,不足二十个字节,数据库也会在abc后面自动加上17个空格,以补足二十个字节;
char是区分中英文的,中文在char中占两个字节,而英文占一个,所以char(20)你只能存20个字母或10个汉字。
char适用于长度比较固定的,一般不含中文的情况
2)varchar varchar是长度不固定的,比如说,你定义了varchar(20),当你插入abc,则在数据库中只占3个字节。
varchar同样区分中英文
3)varchar2 varchar2基本上等同于varchar,它是oracle自己定义的一个非工业标准varchar,不同在于,
varchar2用null代替varchar的空字符串 varchar/varchar2适用于长度不固定的,一般不含中文的情况 4)nvarchar nvarchar是长度不固定的
nvarchar不区分中英文,比如说:你定义了nvarchar(20),你可以存入20个英文字母/汉字或中英文组合,这个20定义的是
字符数而不是字节数
5)nvarchar2 nvarchar2基本上等同于nvarchar,不同在于nvarchar2中存的英文字母也占两个字节
nvarchar/nvarchar2适用于存放中文 6)long LONG数据类型可以存放2GB的字符数据,它是从早期版本中继承来的。现在如果想存储大容量的数据,Oracle推荐使用CLOB和NCLOB数据类型。在表和SQL语句中使用LONG类型有许多限制。所以已经不大推荐使用了。
三)数字数据类型
Oracle使用标准、可变长度的内部格式来存储数字。这个内部格式精度可以高达38位。
NUMBER数据类型可以有两个限定符,如:
column NUMBER (precision, scale)
precision表示数字中的有效位。如果没有指定precision的话,Oracle将使用38作为精度。
scale表示数字小数点右边的位数,scale默认设置为0.如果把scale设成负数,Oracle将把该数字取舍到小数点左边的指定位数。
四)日期数据类型
1)date 可以存储月,年,日,世纪,时,分和秒。度量粒度是秒
2)timestamp 它包括了所有DATE数据类型的年月日时分秒的信息,而且包括了小数秒的信息。
to_char函数支持date和timestamp
五)其它数据类型
1)raw 用于存储基于字节的数据,最多能存储2000个字节,它没有默认大小,所以在使用时要指定大小,可以建立索引。
2)long raw 用于存储可变长度的二进制数据,最多能存储2GB,它受的限制和LONG类型一样
3)rowid ROWID是一种特殊的列类型,称之为伪列(pseudocolumn)。ROWID伪列在SQL SELECT语句中可以像普通列那样被访问。Oracle数据库中每行都有一个伪列。ROWID表示行的地址,ROWID伪列用ROWID数据类型定义。
ROWID与磁盘驱动的特定位置有关,因此,ROWID是获得行的最快方法。但是,行的ROWID会随着卸载和重载数据库而发生变化,因此建议不要在事务 中使用ROWID伪列的值。例如,一旦当前应用已经使用完记录,就没有理由保存行的ROWID.不能通过任何SQL语句来设置标准的ROWID伪列的值。
列或变量可以定义成ROWID数据类型,但是Oracle不能保证该列或变量的值是一个有效的ROWID.
4)BLOB 它可以存储较大的二进制对象;如图形,音视频剪辑。
5)CLOB 一个字符大型对象,可容纳单字节的字符;不支持宽度不等的字符集;最大为4G字节
6)NLOB 一个字符大型对象,可容纳单字节的字符;不支持宽度不等的字符集;最大为4G字节;储存国家字符集
7)BFILE 包含一个大型二进制文件的定位器,其储存在数据库的外面;使得可以以字符流I/O访问存在数据库服务器上的外部LOB;最大大小为4G字节.