基本数据类型
ORACLE基本数据类型(亦叫内置数据类型 built-in datatypes)可以按类型分为:字符串类型、数字类型、日期类型、LOB类型、LONG RAW& RAW类型、ROWID & UROWID类型。讲叙字符串类型前,先要讲一下编码。字符串类型的数据可依编码方式分成数据库字符集(CHAR/VARCHAR2/CLOB/LONG)和国际字符集(NCHAR/NVARCHAR2/NCLOB)两种。数据库中的字符串数据都通过字符集将字符转换为数字后(二进制),才存储到数据块中。通过不同的编码集转换,即便是相同的字符,也可能会转换成不同的二进制编码。这也是产生乱码的原因。数据库的编码格式一般是在创建数据库时指定的。当然也可以修改数据库的编码。
查看数据库视图所包含的数据类型:SELECT * FROM DBA_TYPES WHERE OWNER IS NULL
字符串类型
字符类型根据存储空间可以分为固定长度字符类型(char/nchar)和不固定长度字符类型(varchar2/nvarchar2)
-
固定长度类型 :当输入的值长度小于固定长度,会自动向右补足空格,然后才将字段值s存储到数据库中。
-
不固定长度类型 :当输入的值长度小于该字段的限制长度时,并不会自动补足空白,直接将数据保存到数据库中;
-
char(size[Byte|Char]) :默认一个字节,n的最大值是2000,定长字符串。如非null的char(n)总是包含n个字节信息。可以指定他存储字节或字符,例:char(12 byte)或char(12 char)。
-
nchar(n):默认1字符,最大存储内容2000字节.这是一个包含Unicode格式数据的定长字符串。它的最大长度取决于国家字符集。
-
varchar2(n BYTE/CHAR):最大长度必须指定,至少为1字节或者1字符,n值最大为4000.长度为n个字节的可变长度且非Unicode的字符数据。
-
varchar(n):VARCHAR数据类型目前是VARCHAR2的同义词。
-
nvarchar2(n):最大长度必须指定,最大存储内容4000字节.包含n个字符的可变长度Unicode字符数据。
例:我和coffee
char字段占n个字节的存储空间
varchar字段占22+6=10个字节的存储空间
nvarchar字段占82=16个字节的存储空间
字段值只是英文可选择varchar2,而字段值存在较多的双字节(中文等)字符时使用nvarchar2
数字类型
NUMBER(p[,s]):1-22字节。P(Precison)取值范围1到38,S(Scale)取值范围-84到127.可以存放数据范围为10130~10126(不包含此值).正值s为小数位数,负值s表示四舍五入到小数点左部多少位。
例:123.89
NUMBER(6,1) 123.9
NUMBER(6,-1) 120
INTEGER类型:INTEGER是NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。
BINARY_FLOAT:每个BINARY_FLOAT的值需要5个字节,其中有一长度字节。32位单精度浮点数类型。符号位1位,指数位8位,尾数位23位
BINARY_DOUBLE:9字节,其中有一长度字节。64位双精度浮点数类型
日期类型
DATE:其中总包含7个属性,包括:世纪、年、月、日期、小时、分钟和秒。一般占用7个字节的存储空间
TIMESTAMP [(fractional_seconds_precision)](时间戳):一个7字节或12字节的定宽日期/时间数据类型。fractional_seconds_precision为Oracle存储秒值小数部分位数,默认为6,可选值为0到9。没有时间区
TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE:使用UTC,这是TIMESTAMP类型的变种,它包含了时区偏移量的值
TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE:存时使用数据库时区,取时使用回话的时区
INTERVAL YEAR [(year_precision)] TO MONTH:包含年、月的时间间隔类型。year_precision是年字段的数字位数,默认为2,可取0至9
INTERVAL DAY [(day_precision)]TO SECOND [(fractional_seconds_precision)]:day_precision是月份字段的数字位数,默认为2,可取0至9
CLOB:最大为(4GB-1)*数据库块大小,存储单字节或者多字节字符数据,支持事务处理。主要用于存储大型英文字符
NCLOB:最大为(4GB-1)*数据库块大小,存储Unicode数据。支持事务处理。主要用于存储大型非英文字符
BLOB:最大为(4GB-1)*数据库块大小,存储非结构化二进制数据,支持事务处理。可以被认为是没有字符集语义的比特流,主要存储图像、声音、视频等文件。
BFILE:LOB地址指向文件系统上的一个二进制文件,维护目录和文件名。不参与事务处理。只支持只读操作。
注意:
遇到大对象列时,插入空白构造函数。 字符型:empty_clob(),empty_nclob() 二进制型:empty_blob() 二进制文件类型:BFileName函数指向外部文件。 BFileName函数: BFileName(‘逻辑目录名’,‘文件名’); 逻辑目录名只能大写,因为数据词典是以大写方式存储。Oracle是区分大小写的。 在创建时,无需将BFileName函数逻辑目录指向物理路径,使用时才做检查二者是否关联。 例子: Insert Into tLob Values(1,‘Gene’,empty_clob(),empty_blob(),bfilename(‘MYDIR’,‘IMG_0210.JPG’));
可以在INSERT语句中使用这些初始化函数,初始化完成后,可以使用UPDATE语句
向大对象列中加入数据。
其他类型
LONG:最大为2GB,变长类型,存储字符串。与VARCHAR2 或CHAR 类型一样,存储在LONG 类型中的文本要进行字符集转换.ORACLE建议开发中使用CLOB替代LONG类型。支持LONG 列只是为了保证向后兼容性。CLOB类型比LONG类型的限制要少得多。
RAW(n):最大2000字节,n为字节数,必须指定n。变长类型,字符集发生变化时不会改变值。
LONG RAW:最大为2GB,变长类型,不建议使用,建议转化为BLOB类型,字符集发生变化时不会改变值。
ROWID:10字节.代表记录的地址。显示为18位的字符串。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。ROWID它是一个伪列,它并不实际存在于表中
UROWID:UROWID(universal rowid)类型可以存储物理,逻辑或外来(non-Oracle)ROWID