类型
char(n)
参数
n=1 to 2000
说明
1> 定长字符串,n字节长, 单位是字节,长度不够时往后面填充空格以补满
2> 如果不指定长度,缺省为1个字节长
3> 采用的是非Unicode编码,一个汉字为2字节
举例
SQL语句
执行结果
CREATE TABLE test1(charTest CHAR(1));
INSERT INTO TEST1 VALUES ('中');
ORA-12899: 列 "SYS"."TEST1"."CHARTEST"的值太大 (实际值: 2, 最大值: 1)
create table test2(charTest char(4));
insert into test2 values('a');
select charTest,dump(charTest) from test2;
CHARTEST DUMP(CHARTEST)
-------- ----------------------------------
a Typ=96 Len=4: 97,32,32,32
类型
nchar(n)
参数
n=1 to 2000
说明
1> 定长字符串,n字节长, 单位是字节,长度不够时往后面填充空格以补满
2> 最大长度2000字节
3> 采用Unicode编码,一个汉字为一个字符
举例
SQL语句
执行结果
create table test1(charTest nchar(1))
insert into test1 values('中')
Table created
1 row inserted
create table test2(charTest nchar(4));
insert into test2 values('a');
select charTest,dump(charTest) from test2;
CHARTEST DUMP(CHARTEST)
----------------------------------------
a Typ=96 Len=8: 0,97,0,32,0,32,0,32
类型
varchar2(n)
参数
n=1 to 4000
说明
1> 最大长度为4000,单位为字节
2> 采用非unicode编码,汉字占两个字节,字母符号数字占一个自己
3> 变长,如果数据长度没有达到最大值n,会根据数据大小自动调节字段长度
4> 实际存储的数据的最大长度不能超过定义时的长度
5> 可做索引的最大长度3209。(不懂什么意思)
举例
SQL语句
执行结果
create table VCTest(VChar varchar2(1));
insert into VCTest values('中');
ORA-12899: 列 "RENJIE"."VCTEST"."VCHAR"的值太大 (实际值: 2, 最大值: 1)
create table VCTest2(VChar varchar2(4001));
ORA-00910: 指定的长度对于数据类型而言过长
create table VCTest3(VChar varchar2(4));
insert into VCTest3 values(' a '); --空格a空格
select VChar,dump(VChar) from VCTest3;
Table created
1 row inserted
VCHAR DUMP(VCHAR)
----- ---------------------------
a Typ=1 Len=2: 32,97
a Typ=1 Len=3: 32,97,32
类型
nvarchar2(n)
参数
n=1 to 4000
说明
1> 最大长度4000字节,单位为字节
2> 采用非Unicode编码,所有的字符都只占两个字节,汉字也是
3> 变长,如果数据长度没有达到最大值n,会根据数据大小自动调节字段长度
4> 实际存储的数据的最大长度不能超过定义时的长度
举例
SQL语句
执行结果
create table NVCTest(NVChar nvarchar2(1));
insert into NVCTest values('中');
Table created
1 row inserted
create table VCTest2(VChar nvarchar2(4001))
ORA-00910: 指定的长度对于数据类型而言过长
create table NVCTest3(VChar nvarchar2(4));
insert into NVCTest3 values(' a '); --空格a空格
select VChar,dump(VChar) from NVCTest3;
VCHAR DUMP(VCHAR)
-------- ------------------------------------
a Typ=1 Len=6: 0,32,0,97,0,32
类型
number(m,n)
参数
m=1 to 38
n=-84 to 127说明
1> m是所有有效数字的位数,n是小数点以后的位数
2> 数字的进度按照mn做四舍五入操作,n为负数代表数值只取到小数点之前多少位
3> 变长存储,实际存储数据的长度是按参数四舍五入后的数据的实际长度,而不是定义时的长度
4> mn均可以省略,如果省略则取其默认值
举例
SQL语句
执行结果
create table numTest(numT number(3,2));
insert into numTest values(1.234);
insert into numTest values(1.235);
insert into numTest values(11.11);
Table created
1 row inserted
1 row inserted
ORA-01438: 值大于为此列指定的允许精度
select numT,length(numT) from numTest;
NUMT LENGTH(NUMT)
----- -------------------
1.23 4
1.24 4
类型
date
参数
无
说明
1> 存储范围:公元前4712年1月1日——公元4712年12月31日
2> 其实在内部是按7个字节来保存日期数据,在定义中还包括小时、分、秒
3> 缺省格式为DD-MON-YY,如07-11月-00 表示2000年11月7日
4> 当日起参与计算的时候粒度为天
举例
SQL语句
执行结果
create table dateTest (dateT date);
insert into dateTest values(sysdate);
select to_char(dateT,'YYYY-MM-DD HH24:MI:SS') d from dateTest;
select to_char(dateT-1,'YYYY-MM-DD HH24:MI:SS') d from dateTest;
select to_char(dateT-1/24,'YYYY-MM-DD HH24:MI:SS') d from dateTest;
D
-------------------
2012-10-17 19:42:53
2012-10-16 19:42:53
2012-10-17 18:42:53
select length(dateT) from dateTest;
LENGTH(DATET)
--------------------
9
类型
timestamp(p)
参数
p=0 to 9
说明
1> 保存的精度与date相比较更为精确,保存到小数秒
2> 小数位数可以指定为0-9,默认为6位,所以最高精度可以到ns(纳秒),
3> TIMESTAMP日期类型如果与数值进行加减运算会自动转换为DATE型,也就是说小数秒会自动去除。
4> 如果精度为0,则用7字节存储,否则用11个字节存储,格式为:
第1字节:世纪+100
第2字节:年
第3字节:月
第4字节:天
第5字节:小时+1
第6字节:分+1
第7字节:秒+1
第8-11字节:纳秒,采用4个字节存储,内部运算类型为整形
举例
SQL语句
执行结果
create table STTest(stt timestamp);
insert into STTest values(sysdate);
select stt,length(stt) from STTest;
STT LENGTH(STT)
-------------------------------------- -----------
17-10月-12 07.50.42.000000 下午 28
create table STTest2(stt timestamp(9));
insert into STTest2 values(sysdate);
select stt,length(stt) from STTest2;
STT LENGTH(STT)
------------------------------------------ -----------
17-10月-12 07.50.42.000000000 下午 31
类型
long
参数
无
说明
1> 可变长字符列,最大长度限制是2GB
2> 用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。
3> long是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
举例
SQL语句
执行结果
类型
raw(n)
参数
n=1 to 2000
说明
1> 可变长二进制数据,在具体定义字段的时候必须指明最大长度n
2> raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
举例
SQL语句
执行结果
类型
long raw
参数
说明
1> 可变长二进制数据,最大长度是2GB
2> 在同一张表中不能同时有long类型和long raw类型
3> long raw是一种较老的数据类型,将来会逐渐被BLOB、CLOB、NCLOB等大的对象数据类型所取代。
举例
SQL语句
执行结果
类型
blob -- 二进制,如果exe, zip
clob -- 单字节码,比如一般的文本文件
nclob -- 多字节码,如UTF格式的文件
参数
无
说明
1> 变长,用来保存较大的图形文件或带格式的文本文件,最大长度是4GB。
2> LOB有几种类型,取决于你使用的字节的类型。
3> 可以执行读取、存储、写入等特殊操作。
举例
SQL语句
执行结果
类型
bfile
参数
无
说明
1> 在数据库外部保存的大型二进制对象文件,最大长度是4GB。
2> 这种外部的LOB类型,通过数据库记录变化情况,但是数据的具体保存是在数据库外部进行的。
举例
SQL语句
执行结果
附录一:
关于Unicode编码格式的介绍:http://baike.baidu.com/view/40801.htm