Oracle数据库数据类型

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • A.字段类型介绍 不同的关系型数据库在字段类型的具体化上差异较多,这里无法一一详述,但具体化的字段类型再多,无外乎...
    SnowflakeCloud阅读 10,923评论 1 12
  • SQL SELECT 语句 一、查询SQL SELECT 语法 (1)SELECT 列名称 FROM 表名称 (2...
    有钱且幸福阅读 5,333评论 0 33
  • MySQL数据库对象与应用 2.1-MySQL数据类型 库建立好之后基本不动,和我们接触最频繁的是表. 建表就是声...
    极客圈阅读 2,084评论 0 8
  • 你所理解的安全感是什么? 我要说的是什么概念? 上次看了一部纪录片《地球脉动2》,我看里面的大多数动物的反应速度都...
    我是刘良阅读 236评论 0 1
  • 中国的父母,我发现,是真的不会爱孩子。 例子随时就有啊,现在的家庭,都喜欢给孩子吃冷饮,吃各种零食,然后又开始抱怨...
    开心的灵通阅读 214评论 1 0