在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)长度无关;
文章转载出处:http://blog.csdn.net/yangliehui/article/details/49486791