字段类型 中文说明 限制条件 其它说明 数据库
CHAR 固定长度字符串 最大长度2000 bytes session
VARCHAR2 可变长度的字符串 最大长度4000 bytes 可作索引的最大长度749 数据结构
NCHAR 根据字符集而定的固定长度字符串 最大长度2000 bytes 函数
NVARCHAR2 根据字符集而定的可变长度字符串 最大长度4000 bytes 测试
DATE 日期(日-月-年) DD-MM-YY(HH-MI-SS) 通过严格测试,无千虫问题 编码
LONG 超长字符串 最大长度2G(231-1) 足够存储大部头著做 操作系统
RAW 固定长度的二进制数据 最大长度2000 bytes 可存放多媒体图象声音等 指针
LONG RAW 可变长度的二进制数据 最大长度2G 同上 视频
BLOB 二进制数据 最大长度4G 对象
CLOB 字符数据 最大长度4G
NCLOB 根据字符集而定的字符数据 最大长度4G
BFILE 存放在数据库外的二进制数据 最大长度4G
ROWID 数据表中记录的惟一行号 10 bytes ********.****.****格式,*为0或1
NROWID 二进制数据表中记录的惟一行号 最大长度4000 bytes
NUMBER(P,S) 数字类型 P为整数位,S为小数位
DECIMAL(P,S) 数字类型 P为整数位,S为小数位
INTEGER 整数类型 小的整数
FLOAT 浮点数类型 NUMBER(38),双精度
REAL 实数类型 NUMBER(63),精度更高
数据类型 参数 描述
char(n) n=1 to 2000字节 定长字符串,n字节长,若是不指定长度,缺省为1个字节长(一个汉字为2字节)
varchar2(n) n=1 to 4000字节 可变长的字符串,具体定义时指明最大长度n,
这种数据类型能够放数字、字母以及ASCII码字符集(或者EBCDIC等数据库系统接受的字符集标准)中的全部符号。
若是数据长度没有达到最大值n,Oracle 8i会根据数据大小自动调节字段长度,
若是你的数据先后有空格,Oracle 8i会自动将其删去。VARCHAR2是最经常使用的数据类型。
可作索引的最大长度3209。
number(m,n) m=1 to 38
n=-84 to 127 可变长的数值列,容许0、正值及负值,m是全部有效数字的位数,n是小数点之后的位数。
如:number(5,2),则这个字段的最大值是99,999,若是数值超出了位数限制就会被截取多余的位数。
如:number(5,2),但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。
如:number(3,0),输入575.316,真正保存的数据是575。
date 无 从公元前4712年1月1日到公元4712年12月31日的全部合法日期,
Oracle 8i其实在内部是按7个字节来保存日期数据,在定义中还包括小时、分、秒。
缺省格式为DD-MON-YY,如07-11月-00 表示2000年11月7日。
long 无 可变长字符列,最大长度限制是2GB,用于不须要做字符串搜索的长串数据,若是要进行字符搜索就要用varchar2类型。
long是一种较老的数据类型,未来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
raw(n) n=1 to 2000 可变长二进制数据,在具体定义字段的时候必须指明最大长度n,Oracle 8i用这种格式来保存较小的图形文件或带格式的文本文件,如Miceosoft Word文档。
raw是一种较老的数据类型,未来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
long raw 无 可变长二进制数据,最大长度是2GB。Oracle 8i用这种格式来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件。
在同一张表中不能同时有long类型和long raw类型,long raw也是一种较老的数据类型,未来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
blob
clob
nclob 无 三种大型对象(LOB),用来保存较大的图形文件或带格式的文本文件,如Miceosoft Word文档,以及音频、视频等非文本文件,最大长度是4GB。
LOB有几种类型,取决于你使用的字节的类型,Oracle 8i实实在在地将这些数据存储在数据库内部保存。
能够执行读取、存储、写入等特殊操做。
bfile 无 在数据库外部保存的大型二进制对象文件,最大长度是4GB。
这种外部的LOB类型,经过数据库记录变化状况,可是数据的具体保存是在数据库外部进行的。
Oracle 8i能够读取、查询BFILE,可是不能写入。
大小由操做系统决定。
数据类型是列或存储过程当中的一个属性。
Oracle支持的数据类型能够分为三个基本种类:字符数据类型、数字数据类型以及表示其它数据的数据类型。
字符数据类型
CHAR char数据类型存储固定长度的字符值。一个CHAR数据类型能够包括1到2000个字符。若是对CHAR没有明确地说明长度,它的默认长度则设置为1。若是对某个CHAR类型变量赋值,其长度小于规定的长度,那么Oracle自动用空格填充。
VARCHAR2 存储可变长度的字符串。虽然也必须指定一个VARCHAR2数据变量的长度,可是这个长度是指对该变量赋值的最大长度而非实际赋值长度。不需用空格填充。最多可设置为4000个字符。由于VARCHAR2数据类型只存储为该列所赋的字符(不加空格),因此VARCHAR2须要的存储空间比CHAR数据类型要小。
Oracle推荐使用VARCHAR2
NCHAR和NVARCHAR2 NCHAR和NVARCHAR2数据类型分别存储固定长度与可变长度的字符串,可是它们使用的是和数据库其余类型不一样的字符集。在建立数据库时,须要指定所使用的字符集,以便对数据中数据进行编码。还能够指定一个辅助的字符集[即本地语言集]。NCHAR和NVARCHAR2类型的列使用辅助字符集。NCHAR和NVARCHAR2类型的列使用辅助字符集。
在Oracle 9i中,能够以字符而不是字节为单位表示NCHAR和NVARCHAR2列的长度。
LONG long数据类型能够存放2GB的字符数据,它是从早期版本中继承下来的。如今若是存储大容量的数据,Oracle推荐使用CLOB和NCLOB数据类型。在表和SQL语句中使用LONG类型有许多限制。
CLOB和NCLOB CLOB和NCLOB数据类型能够存储多达4GB的字符数据。NCLOB数据类型可存储NLS数据。
数字数据类型
Oracle使用标准、可变长度的内部格式来存储数字。这个内部格式精度能够高达38位。
NUMBER数据类型能够有两个限定符,如:column NUMBER(precision,scale)。precision表示数字中的有效位。若是没有指定precision的话,Oracle将使用38做为精度。scale表示小数点右边的位数,scale默认设置为0。若是把scale设成负数,Oracle将把该数字取舍到小数点左边的指定位数。
日期数据类型
Oracle标准日期格式为:DD-MON-YY HH:MI:SS
经过修改实例的参数NLS_DATE_FORMAT,能够改变实例中插入日期的格式。在一个会话期间,能够经过Alter session SQL命令来修改日期,或者经过使用SQL语句的TO_DATE表达式中的参数来更新一个特定值。
其它的数据类型
RAW和LONG RAW RAW和LONG RAW数据类型主要用于对数据库进行解释。指定这两种类型时,Oracle以位的形式来存储数据。RAW数据类型通常用于存储有特定格式的对象,如位图。RAW数据类型可占用2KB的空间,而LONG RAW数据类型则能够占用2GB大小。
ROWID ROWID是一种特殊的列类型,称之为伪列(pseudocolumn)。ROWID伪列在SQL SELECT语句中能够像普通列那样被访问。Oracle数据库中每行都有一个伪列。ROWID表示行的地址,ROWID伪列用ROWID数据类型定义。
ROWID与磁盘驱动的特定位置有关,所以,ROWID是得到行的最快方法。可是,行的ROWID会随着卸载和重载数据库而发生变化,所以建议不要在事务中使用ROWID伪列的值。例如,一旦当前应用已经使用完记录,就没有理由保存行的ROWID。不能经过任何SQL语句来设置标准的ROWID伪列的值。
列或变量能够定义成ROWID数据类型,可是Oracle不能保证该列或变量的值是一个有效的ROWID。
LOB(大型对象)数据类型,能够保存4GB的信息。LOB有如下3中类型:
<CLOB>,只能存储字符数据
<NCLOB>,保存本地语言字符集数据
<BLOB> ,以二进制信息保存数据
能够指定将一个LOB数据保存在Oracle数据库内,仍是指向一个包含次数据的外部文件。
LOB能够参与事务。管理LOB中的数据必须经过DBMS_LOB PL/SQL内置软件包或者OGI接口。
为了便于将LONG数据类型转换成LOB,Oracle 9i包含许多同时支持LOB和LONG的函数,喊包括一个ALTER TABLE语句的新选择,它容许将LONG数据类型自动转换成LOB。
BFILE
BFILE数据类型用作指向存储在Oracle数据库之外的文件的指针。
XML Type
做为对XML支持的一部分,Oracle 9i包含了一个新的数据类型XML Type。定义为XMLType的列将存储一个字符LOB列中的XML文档。有许多内置的功能可使你从文档中抽取单个节点,还能够在XML Type文档中对任何节点建立索引。
用户自定义数据
从Oracle 8之后,用户能够定义本身的复杂数据类型,它们由Oracle基本数据类型组合而成。
AnyType、AnyData和AnyDataSet
Oracle包括3个新的数据类型,用于定义在现有数据类型以外的数据结构。其中每种数据类型必须用程序单元来定义,以便让Oracle9i知道如何处理这些类型的特定实现。
类型转换
Oracle会自动将某些数据类型转换成其余的数据类型,转换取决于包括该值的SQL语句。
数据转换还能够经过Oracle的类型转换函数显示地进行。
链接与比较
在大多数平台上Oracle SQL中的链接操做符用两条竖线(||)表示。链接是将两个字符值链接。Oracle的自动类型转换功能使得两个数字值也能够进行链接。
NULL
NULL值是关系数据库的重要特征之一。实际上,NULL不表明任何值,它表示没有值。若是要建立表的一个列,而这个列必须有值,那么应将它指定为NOT NULL,这表示该列不能包含NULL值。
任何数据类型均可以赋予NULL值。NULL值引入了SQL运算的三态逻辑。若是比较的一方是NULL值,那么会出现3种状态:TURE、FALSE以及二者都不是。
由于NULL值不等于0或其余任何值,因此测试某个数据是否为NULL值只能经过关系运算符IS NULL来进行。
NULL值特别适合如下状况:当一个列还未赋值时。若是选择不使用NULL值,那么必须对行的全部列都要赋值。这实际上也取消了某列不须要值的可能性,同时对它赋的值也很容易产生误解。这种状况则可能误导终端用户,而且致使累计操做的错误结果。
number(p,s)
p:1~38
s:-84~127
p>0,对s分2种状况:1. s>0
精确到小数点右边s位,并四舍五入。而后检验有效数位是否<=p;若是s>p,小数点右边至少有s-p个0填充。
2. s<0
精确到小数点左边s位,并四舍五入。而后检验有效数位是否<=p+|s|
123.2564 NUMBER 123.2564
1234.9876 NUMBER(6,2) 1234.99
12345.12345 NUMBER(6,2) Error
1234.9876 NUMBER(6) 1235
12345.345 NUMBER(5,-2) 12300
1234567 NUMBER(5,-2) 1234600
12345678 NUMBER(5,-2) Error
123456789 NUMBER(5,-4) 123460000
1234567890 NUMBER(5,-4) Error
12345.58 NUMBER(*, 1) 12345.6
0.1 NUMBER(4,5) Error
0.01234567 NUMBER(4,5) 0.01235
0.09999 NUMBER(4,5) 0.09999