Oracle数据库数据类型-阿里云开发者社区

开发者社区> 过了即是客> 正文

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C/C++/C#/Python:数据类型比较
C/C++/C#/Python这四种语言,由低级到高级,代表了计算机编程语言的一个发展流程,前两种编译型语言大家可能比较熟悉,在大学阶段都基本了解过。
2799 0
C++语言基础 例程 C++的数据类型和运算符
贺老师的教学链接 第一个C++程序 #include <iostream> //包含头文件iostream using namespace std; //使用命名空间std int main( ) { cout<<"Hello World."<<endl; //输出结果 return
833 0
【C/C++】C/C++基本数据类型
标准C基本数据类型:int char long short float double void以及它们与signed、unsigned的组合。标准C++增加了bool型和wchar_t型,在32位操作系统上,它们的长度如下表: ...
696 0
SQL语句oracle中如何插入Date类型的数据
在开发的时候,经常要写条SQL语句将信息插入表中,插入的数据如果字段是date类型,就必须将date类型转换成字符串String类型在通过sql语句插入数据库。这是我字段唯一的方法,如果有高人请另赐教! 我的解决方法是用oracle中的to_date()方法,具体看下面的例子   Oracle中...
1368 0
Oracle数据库的可恢复性设置
整理自《Oracle 11g OCP/OCA 认证指南》 001     为了保证数据库的最大可恢复性,必须多路复用控制文件;必须多路复用联机重做日志;必须以归档日志模式运行数据库,并多路复用归档日志文件;最后必须作常规备份。
849 0
MyBatis Generator(MBG)Oracle使用说明 公共同义词 LONG数据类型
Oracle使用说明公共同义词 Public Synonyms如果要为具有公共同义词的表生成对象,则应该实际上根据真实表生成对象,然后在运行时更改表名称。MyBatis Generator自动支持。
836 0
Oracle INTERVAL DAY TO SECOND数据类型
INTERVAL DAY TO SECOND数据类型 Oracle语法: INTERVAL '{ integer | integer time_expr | time_expr }' { { ...
697 0
+关注
过了即是客
一个普普通通的程序员
156
文章
2
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载