Oracle数据库常用数据类型

Oracle数据库常用数据类型

Oracle数据类型很丰富,官方文档https://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#CNCPT012 ,在此选择常用的简要总结介绍。

 

字符数据类型

字符串、文本

☆Char

定长格式字符串,在数据库中存储时不足位数填补空格,它的声明方式如CHAR(size),size为字符串长度,可指定一个1-2000字节之间的值作为CHAR的宽度(以字节或字符为单位)。默认(缺省)值为1字节

不建议使用,会带来不必要的麻烦:

a、字符串比较的时候,如果不注意(char不足位补空格)会带来错误

b、字符串比较的时候,如果用trim函数,这样该字段上的索引就失效(有时候会带来严重性能问题)

c、浪费存储空间(无法精准计算未来存储大小,只能留有足够的空间;字符串的长度就是其所占用空间的大小)

 

☆Varchar2 / Varchar

注意:varchar是被废弃的类型,oracle目前都推荐使用varchar2。

用于保存变长的字符串数据。它的声明方式如Varchar2 (size),其中最大字节长度由(size)指定。每行长度可变,最大长度为每行4000字节,没有缺省值。

设置长度(size)前需考虑字符集为单字节或多字节。由于VARCHAR2数据类型只存储为该列所赋的字符(不加空格),所以VARCHAR2需要的存储空间比CHAR数据类型要小。

注意:varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;

当语言环境为中文(SIMPLIFIED CHINESE_CHINA.ZHS16GBK)时,一个VARCHAR2(200)的数据列可以保存200个英文字符或者100个汉字字符。

VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;大部分情况下建议使用varchar2类型,可以保证更好的兼容性。

 

大对象类型(Large Objects)

包括BLOB、 CLOB、 NCLOB和BFILE。它们允许你存储和可操作大型非结构化的数据,例如图片、文本、视频、声音等等。

☆BLOB类型

BLOB类型在数据库中存储非结构化的二进制数据,最多可以存储128T的二进制数据。

☆B CLOB和NCLOB类型

CLOB和NCLOB类型可以储存最多128T的字符数据。CLOB储存数据库字符集的数据,而NCLOB存储Unicode字符集数据。

☆B BFILE类型

BFILE类型存储在数据库之外的非结构化的二进制数据。BFILE数据存储了指向外部文件的文件定位符。可以存储的BFILE数量手操作系统的限制。另外,BFILE是只读的。

 

数值类型

数值类型可以保存正负定点数和浮点数、零、无穷大和未定义的操作结果(例如非数字NaN)。

☆NUMBER类型

NUMBER类型用于存储定点数和浮点数,可以保存几乎任意大小(38位精度)的数值并在不同版本的Oracle数据库中通用。

 

你可以选择指定NUMBER类型精度和数值范围:

column_name NUMBER (precision, scale)

如果precision(精度)没有指定,那么数据库会按照给定的值保存数值。如果scale(数值范围)没有指定,数值范围就是0。Oracle保证精度小于等于38位的数值的可移植性。可以将精度指定为*,这种情况下精度是38位,数值范围仍然是给定的。如下:

column_name NUMBER (*, scale)

下面的表格展示了数值范围是如何影响数据存储的,以输入7,456,123.89为例:

指定为

存储为

NUMBER

7456123.89

NUMBER(*,1)

7456123.9

NUMBER(9)

7456124

NUMBER(9,2)

7456123.89

NUMBER(9,1)

7456123.9

NUMBER(6)

not accepted, exceeds precision(不认可,越出精度)

NUMBER(7,-2)

7456100

 

☆浮点数类型

Oracle数据库专门为浮点数提供了两种数据类型,BINARY_FLOAT和BINARY_DOUBLE。它们支持所有NUMBER提供的基本功能。并且由于NUMBER使用十进制精度,BINARY_FLOAT和BINARY_DOUBLE使用二进制精度,这为它们提供了更快的数值计算速度并常常减少了存储需求。

 

BINARY_FLOAT和BINARY_DOUBLE是近似的数值类型。它们储存了十进制数值的近似表示,而不是精确表示。例如,十进制数0.1不能精确的表示成BINARY_FLOAT或者BINARY_DOUBLE。它们经常用来进行科学计算,在行为上和Java以及XML Schema中的FLOAT和DOUBLE相似。

 

BINARY_FLOAT

BINARY_FLOAT是32位单精度浮点数类型,需要占用5个字节的存储空间,包括一个长度字节。

 

BINARY_DOUBLE

BINARY_DOUBLE是64位双精度浮点数类型,需要占用9个字节的存储空间,包括一个长度字节。

 

值                 BINARY_FLOAT        BINARY_DOUBLE

最大正值       3.40282E+38F         1.79769313486231E+308

最小正值       1.17549E-38F        2.22507485850720E-308

 

日期和时间类型

日期时间类型包括DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE。时间间隔类型包括INTERVAL YEAR TO MONTH和INTERVAL DAY TO SECOND两种。

 

☆DATE类型

DATE类型存储了日期和时间信息。对于每个DATE类型的值,Oracle存储了以下信息:世纪、年、月、日、时、分、秒。可以为DATE类型的值指定字面值,也可以使用TO_DATE函数将一个字符或者数值转换成DATE类型。

 

☆TIMESTAMP类型

TIMESTAMP数据类型是DATE类型的扩展。它存储了年、月、日,加上时、分、秒。这个数据类型在储存精确的时间值时很有用。

 

rowid类型

Oracle数据库中每个表的每行记录都有一个存储的物理位置,即表的rowid伪列,采用rowid作为where条件的访问效率最高。

rowid的访问效率虽然是最高的,但是,在实际应用中要谨慎,需要注意两个问题:

(1)rowid存放的是表记录的物理位置,在数据整理、数据备份和迁移的时候,记录的物理位置会发生改变;

(2)rowid是Oracle数据库专有的数据类型,与其它的数据库不兼容。

 

Oracle还提供用户自定义的数据类型,可用用关键字create type 或者用type定义自定义类型,在此不做讨论,可参见 https://blog.csdn.net/ththcc/article/details/79961982

 

若想进一步学习,可阅读下面链接

https://www.cnblogs.com/kliine/p/10018607.html

https://www.freecplus.net/8cdd1d008f844f77bdc8bca0d5f0e0b6.html

 

猜你喜欢

转载自blog.csdn.net/cnds123/article/details/114684695