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