Oracle数据库数据类型
- 一、基本数据类型分类
- 二、字符串类型
- 1、CHAR类型
- 2、NCHAR类型
- 3、VARCHAR2类型
- 4、NVARCHAR2类型
- 三、数字类型
- 1、NUMBER类型
- 2、INTEGER类型
- 3、FLOAT类型
- 四、日期类型
- 1、DATE类型
- 2、TIMESTAMP类型
- 3、TIMESTAMP WITH TIME ZONE类型
- 五、LOB类型
- 1、CLOB 数据类型
- 2、NCLOB 数据类型
- 3、BLOB 数据类型
- 4、BFILE 数据类型
- 六、RAW & LONG RAW类型
- 1、LONG类型
- 2、LONG RAW 类型
- 3、RAW类型
- 七、ROWID & UROWID类型
- 1、ROWID类型
- 2、UROWID类型
一、基本数据类型分类
基本数据类型就是内置数据类型,类型可分为 :字符串类型、数字类型、日期类型、LOB类型、LONG RAW&RAW类型、ROWID&UROWID类型。
二、字符串类型
1、字符串类型的数据可依编码方式分成数据库字符集(CHAR/VARCHAR2/CLOB/LONG)和国际字符集(NCHAR/NVARCHAR2/NCLOB) 两种。
2、字符串数据类型还可以依据存储空间分为固定长度类型(CHAR/NCHAR) 和可变长度类型(VARCHAR2/NVARCHAR2)两种。
3、固定长度与可变长度
1)固定长度:是指虽然输入的字段值小于该字段的限制长度,但是实际存储数据时,会先自动向右补足空格后,才将字段值的内容存储到数据块中。这种方式虽然比较浪费空间,但是存储效率较可变长度类型要好。同时还能减少数据行迁移情况发生。
2)可变长度:是指当输入的字段值小于该字段的限制长度时,直接将字段值的内容存储到数据块中,而不会补上空白,这样可以节省数据块空间。
4、数据库中的字符串数据都通过字符集将字符转换为数字后(二进制),才存储到数据块中。通过不同的编码集转换,即便是相同的字符,也可能会转换成不同 的二进制编码。这也是产生乱码的原因。
1、CHAR类型
1、CHAR类型,定长字符串,会用空格填充来达到其最大长度。非NULL的CHAR(12)总是包含12字节信息。CHAR字段最多可以存储2,000字节的信息。如果创建表时,不指定CHAR长度,则默认为1。
2、可指定它存储字节或字符,例如 CHAR(12 BYTE) 与CHAR(12 CHAR),一般来说默认是存储字节,可查看数据库参数NLS_LENGTH_SEMANTICS的值,语句如下:
select * from nls_database_parameters t where t.parameter=‘NLS_LENGTH_SEMANTICS’;
同时查看数据库字符集:
select * from nls_database_parameters t where t.parameter=‘NLS_CHARACTERSET’;
数据库的NLS_CHARACTERSET 为AL32UTF8,即一个汉字占用三到四个字节。如果NLS_CHARACTERSET为ZHS16GBK,则一个字符占用两个字节(1char=2byte)。
注意:
1、NLS_LENGTH_SEMANTICS参数是一个专为创建CHAR和VARCHAR2两种字符型的列时,指定使用的字节长度,还是使用字符长度的定义方式,有byte和char两种值,默认为byte。
2、NLS_LENGTH_SEMANTICS参数的值,不对已经存在的列产生任何影响,只是在创建表中的列时,默认的指定列长度类型为byte还是char,如果在创建或修改表的列时指定了长度类型,完全覆盖NLS_LENGTH_SEMANTICS参数的值。
2、NCHAR类型
这是一个包含UNICODE格式数据的定长字符串。NCHAR字段最多可以存储2,000字节的信息。它的最大长度取决于国家字符集。另外查询时,如果字段是NCHAR类型,语句如下:
SELECT * FROM TABLE_NAME T WHERE COL_NAME=N’HELLO WORLD,哈哈’;
3、VARCHAR2类型
变长字符串,与CHAR类型不同,它不会使用空格填充至最大长度。VARCHAR2最多可以存储4,000字节的信息。
4、NVARCHAR2类型
这是一个包含UNICODE格式数据的变长字符串。 NVARCHAR2最多可以存储4,000字节的信息。
三、数字类型
1、NUMBER类型
NUMBER(P,S)是最常见的数字类型,可以存放数据范围为10130~1026(不包含此值),需要1~22字节(BYTE)不等的存储空间。
NUMBER (p,s)
定点数的精度§和刻度(s)范围:
p 1-38
s -84-127
number(p,s),s大于0,表示有效位最大为p,小数位最多为s,小数点右边s位置开始四舍五入,若s>p,小数点右侧至少有s-p个0填充(必须从小数点处开始并连续)。
举例:
number(2,1) 有效位最大为2,小数点后最多保留1位:
存1.115 得1.2
存1.11 的1.1
存1 得1
存0.01 得0
存11.1 得出错 有效位为3,大于2
存11 得出错 因为11等于11.0 有效位为3,大于2
number(2,4) 有效位最大为2,小数点后最多保留4位:
最大存值:0.0099,至少从小数点处开始并连续填充4-2=2个0,
如存1出错,因为1等于1.0000,有效位为5,大于2
number(p,s),s小于0,表示有效位最大为p+|s|,没有小数位,小数点左边s位置开始四舍五入,小数点左侧s位,每一位均为0。
举例:
number(2,-3) 有效位最大为2+3=5,没有小数位:
存11111 得11000,因为11111等于11111.0,从小数点左侧3位处开始四舍五入。
存11545 得12000
存11545.5 得12000,因为不存小数位,所以舍去小数位
存99999 得出错,因为四舍五入后变为,100000,有效位为6,大于5
存9999 得10000
2、INTEGER类型
INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。
注意:
在oracle数据库建表的时候,decimal,numeric不带精度,oracle会自动把它处理成INTEGER;带精度,oracle会自动把它处理成number。
3、FLOAT类型
FLOAT类型也是NUMBER的子类型。
Float(n),数 n 指示位的精度,可以存储的值的数目。N 值的范围可以从 1 到 126。
注意:
若不知数字的小数位,可使用float类型,若知晓,最好使用number类型。
四、日期类型
1、DATE类型
DATE是最常用的数据类型,日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息,但是日期数据类型具有特殊关联的属性。为每个日期值,Oracle存储以下信息: 世纪、 年、 月、 日期、 小时、 分钟和秒。一般占用7个字节的存储空间。
有效日期范围从公元前4712年1月1日到公元后4712年12月31日
2、TIMESTAMP类型
这是一个7字节或12字节的定宽日期/时间数据类型。它与DATE数据类型不同,因为TIMESTAMP可以包含小数秒,带小数秒的TIMESTAMP在小数点右边最多可以保留9位.
3、TIMESTAMP WITH TIME ZONE类型
这是TIMESTAMP类型的变种,它包含了时区偏移量的值.
五、LOB类型
内置的LOB数据类型包括BLOB、CLOB、NCLOB、BFILE(外部存储)的大型化和非结构化数据,如文本、图像、视屏、空间数据存储。BLOB、CLOB、NCLOB类型.
1、CLOB 数据类型
它存储单字节和多字节字符数据。支持固定宽度和可变宽度的字符集。CLOB对象可以存储最多 (4 gigabytes-1) * (database block size) 大小的字符.
2、NCLOB 数据类型
它存储UNICODE类型的数据,支持固定宽度和可变宽度的字符集,NCLOB对象可以存储最多(4 gigabytes-1) * (database block size)大小的文本数据.
3、BLOB 数据类型
它存储非结构化的二进制数据大对象,它可以被认为是没有字符集语义的比特流,一般是图像、声音、视频等文件。BLOB对象最多存储(4 gigabytes-1) * (database block size)的二进制数据。
4、BFILE 数据类型
二进制文件,存储在数据库外的系统文件,只读的,数据库会将该文件当二进制文件处理.
六、RAW & LONG RAW类型
1、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约束)
2、LONG RAW 类型
可变长度的原始二进制数据,其最长可达2G字节(不用进行字符集转换的数据)
3、RAW类型
用于存储二进制或字符类型数据,变长二进制数据类型,这说明采用这种数据类型存储的数据不会发生字符集转换。这种类型最多可以存储2,000字节的信息.
七、ROWID & UROWID类型
1、ROWID类型
oracle使用ROWID数据类型存储每个数据行在数据库中的地址(rowid)。
物理 rowid[physical rowid]:
用于存储常规表【ordinary table】(即索引表【index-organized table】之外的数据表)、簇表【clustered table】、表分区及子分区、索引、索引分区及子分区数据行的地址。
逻辑 rowid[logical rowid]:
用于存储索引表数据行的地址。
2、UROWID类型
UROWID数据类型,也被称为通用数据类型【universal rowid】,同时支持物理rowid和逻辑rowid,也支持外表【foreign table】(例如通过网关访问的非oracle数据表)的rowid。
注意:
1)数据类型为UROWID的列可以存储各类rowid。
2)要使用UROWID数据类型:compatible初始化参数必须设置为8.1或更高(compatible的作用:用于设定文件格式兼容性)