Oracle常见字段类型及其使用

 

类型

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

转载于:https://www.cnblogs.com/renjie08317/archive/2012/11/07/2758437.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值