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

在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日 星期四

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值