您的位置:首页 > 数据库 > Oracle

浅谈Oracle 中 varchar2(N) 与 varchar2(N char) 的区别

2015-10-29 09:15 435 查看
在oracle数据库表结构中,我们往往会看到varchar2的两种使用方式,如,varchar2(16)、varchar2(16 char),那么这两者有什么区别呢?现在我们实际的例子看一下:

1、创建测试表结构:
SQL> create table vctest( c1 varchar2(1) , c2 varchar2(1 char) );
Table created

2.1、插入一行数据,两个字段的值均为一个字节长度;
SQL> insert into vctest(c1,c2) values('a','b');
1 row inserted

2.2、插入一行数据,注意c1字段,当插入一个字符‘啊’时提示值太大,说明varchar2(N)与字节(byte)数有关系,与字符数无关;
SQL> insert into vctest(c1,c2) values('啊','b');
insert into vctest(c1,c2) values('啊','b')
ORA-12899: 列 "EPAYSCH"."VCTEST"."C1" 的值太大 (实际值: 2, 最大值: 1)

3.1、插入一行数据,注意c2字段,varchar2(1 char)可以插入一个字符,那么我们看它能否存储两个字节(byte)呢?
SQL> insert into vctest(c1,c2) values('a','不');
1 row inserted

3.2、插入一行数据,注意c2字段,当插入两个字节(byte)时,提示值太大,说明varchar2(N char)与字节(byte)数无关,与字符数(汉字或字母)有关;
SQL> insert into vctest(c1,c2) values('a','bc');
insert into vctest(c1,c2) values('a','bc')
ORA-12899: 列 "EPAYSCH"."VCTEST"."C2" 的值太大 (实际值: 2, 最大值: 1)

4、测试表drop
SQL> drop table vctest;
Table dropped
通过上述操作总结:
1、
varchar2(N):可以存储N byte长度,与字符数无关;
varchar2(N char):可以存储N个字符(包括字母和汉字),与字节(byte)长度无关;

2、如:
varchar2(3),可以存储3个byte长度,如'啊a'、'aaa',与字符数无关;
varchar2(3 char),可以存储3个字符(包括字母和汉字),如'啊啊啊'、'aaa'、'啊aa',与字节(byte)长度无关;

2015年10月29日 星期四
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle varchar2