这篇文章的主要目的是分析建设系统所用的存储空间,避免对存储设备的过渡浪费,节省投资。同时也提高对oracle常用数据类型的认识。
介绍的类型如下:
·char
·varchar
·varchar2
·nvarchar
·nvarchar2
·number
·date
char的长度是固定的,比如说,你定义了char(20),即使你你插入abc,不足二十个字节,数据库也会在abc后面自动加上17个空格,以 补足二十个字节;char是区分中英文的,中文在char中占两个字节,而英文占一个,所以char(20)你只能存20个字母或10个汉字;char适 用于长度比较固定的,一般不含中文的情况;CHAR的效率比VARCHAR2的效率稍高。
目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串,但是oracle自己开发了一个数据类型 VARCHAR2,这个类型不是一个标准的VARCHAR,它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值。如果你想有向后兼 容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。
varchar和varchar2是长度不固定的,比如说,你定义了varchar(20),当你插入abc,则在数据库中只占3个字节。中文占两个字节。
varchar和varchar2最多存储4000字节。
nvarchar和nvarchar2是长度不固定的;nvarchar不区分中英文,比如说:你定义了nvarchar(20),你可以存入20 个英文字母/汉字或中英文组合,这个20定义的是字符数而不是字节数;nvarchar2基本上等同于nvarchar,不同在于nvarchar2中存 的英文字母也占两个字节;nvarchar/nvarchar2适用于存放中文。
NUMBER最多占用22个字节,最大可以保存38个十进制位。
Number默认情况下,精度为38位,取值范围1~38之间。它实际上是磁盘上的一个变长类型,会占用0~22 字节的存储空间。 但定义的一个Number型字段到底要占用多少字节呢?从网上找到了如下公式。
其实有公式可以计算:
number(p,s)占用得空间为:
length = floor((p+1)/2) + 1
备注:如果该数值为负数,需要再加一个字节。
----------------
例如:NUMBER(14,4)的类型数值,存储空间为
select floor((14+1)/2) + 1 from dual
结果输出为:8
DATE类型在oracle10g中占用7个字节。
在粗略估计一张表每条记录占用多少空间时,可以参考上述的规则,查询数据字典也是一种途径。
SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME='';
在查询结果中,有一列叫DATA_LENGTH,记录了占用最大字节数。