Oracle数据库数据类型

简介: 本文参考了Oracle官方文档的内容,如果需要详细的资料,直接查看官方文档是更好的方法。字符数据类型CHAR类型CHAR类型存储定长的字符串,当指定CHAR类型的时候,必须指定一个1-2000字节之间的值作为CHAR的宽度(以字节或字符为单位)。

本文参考了Oracle官方文档的内容,如果需要详细的资料,直接查看官方文档是更好的方法。

字符数据类型

CHAR类型

CHAR类型存储定长的字符串,当指定CHAR类型的时候,必须指定一个1-2000字节之间的值作为CHAR的宽度(以字节或字符为单位)。默认为1字节。Oracle保证:

  • 当插入和更新一列的时候,CHAR类型的列具有定长的宽度。
  • 当给定一个较小的值时,值会由空白字符填充至定长长度。
  • 当一个值太大时,Oracle数据库会返回错误。

VHARCHAR2和VARCHAR类型

VARCHAR2类型存储变长的字符串。当创建VARCHAR2类型的列时,需要制定一个1-4000字节之间的值作为最大长度。对于每一行,Oracle数据库会将VARCHAR类型存储成边长的域。如果一个值超过了最大长度,Oracle数据库就会返回错误。使用VARCHAR2和VARCHAR类型可以节省表的空间。

VARCHAR数据类型

VARCHAR数据类型是VARCHAR2的同义词。虽然现在VARCHAR2和VARCHAR是同义词,但是将来可能会将VARCHAR更改为单独的数据类型。因此在使用时候最好只是用VARCHAR2。

NVARCHAR和NVARCHAR2类型

这两种数据类型是Unicode数据类型,用来保存Unicode字符串。它们的字符集只能是AL16UTF16或者UTF8两种,并且在数据库创建时指定国家字符集时指定。

NCHAR的最大宽度是2000字节,因此最多可以存储2000个字符。实际数据受2000字节的大小限制。这两个大小约束条件在运行时必须同时满足。

NVARCHAR2的最大宽度是4000字节,因此最多可以存储4000个字符。实际数据受4000字节的大小限制。这两个大小约束条件在运行时必须同时满足。

LOB类型

LOB是大对象(Large Object),用于存储比较大的数据,有CLOB、NCLOB、BLOB三种,将在后面说明。

LONG类型

LONG类型可以存储最多2的32次方-1字节的变长字符串。这个类型存在的意义仅仅是为了向后兼容,因此不要在自己的数据库中使用这个类型。如果有存储大字符串的需求,使用CLOB和NCLOB类型。

数值类型

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

NUMBER类型

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

以下数值可以保存在NUMBER类型中:

  • 从 1 x 10E-130 到 9.99...9 x 10E125 范围内带有38位有效数字的正数
  • 从 -1 x 10E130 到 9.99...99 x 10E125范围内38位有效数字的负数
  • 正负无穷大(仅当从Oracle数据库版本5中导入时生成)

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

column_name NUMBER (precision, scale) 

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

column_name NUMBER (*, scale) 

下面的表格展示了数值范围是如何影响数据存储的:

输入 指定为 存储为
7,456,123.89 NUMBER 7456123.89
7,456,123.89 NUMBER(*,1) 7456123.9
7,456,123.89 NUMBER(9) 7456124
7,456,123.89 NUMBER(9,2) 7456123.89
7,456,123.89 NUMBER(9,1) 7456123.9
7,456,123.89 NUMBER(6) (not accepted, exceeds precision)
7,456,123.89 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 MONTHINTERVAL DAY TO SECOND两种。

DATE类型

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

TIMESTAMP类型

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

大对象类型

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

BLOB类型

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

CLOB和NCLOB类型

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

BFILE类型

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

最后本来想写全的,发现Oracle官方文档说的实在是太多了。实在是写不动了。就把这最常用的这些写下来吧。写着写着发现变成了官方文档的翻译。希望这部分还没有翻译过,不然我又造了一次重复轮子。

相关文章
|
8天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
【Oracle】玩转Oracle数据库(一):装上去,飞起来!
44 7
|
25天前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(3)
Oracle数据库基本概念理解(3)
18 2
|
7天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
35 5
|
15天前
|
存储 关系型数据库 MySQL
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
MySQL数据库性能大揭秘:表设计优化的高效策略(优化数据类型、增加冗余字段、拆分表以及使用非空约束)
|
25天前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(2)
Oracle数据库基本概念理解(2)
13 1
|
8天前
|
存储 SQL Oracle
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
【Oracle】玩转Oracle数据库(二):体系结构、存储结构与各类参数
32 7
|
25天前
|
Oracle 关系型数据库 数据库
Oracle数据库基本概念理解(1)
Oracle数据库基本概念理解(1)
12 1
|
25天前
|
Oracle 关系型数据库 MySQL
Seata常见问题之oracle 数据库 报 just support mysql如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
53 0
|
Oracle 关系型数据库 数据库
oracle数据库控制文件的备份和恢复之三RMAN自动备份和恢复
使用RMAN自动备份的控制文件向数据库中恢复控制文件
308 0
|
Oracle 关系型数据库 数据库