varchar ,varchar2和nvarchar2的区别

Leon_He2014 2013-07-20 10:16:52

--os:centos 5.6
--oracle version: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
--server characterset:AMERICAN_CHINA.ZHS16GBK

--drop table idb_varchar;
--drop table idb_varchar2;
--drop table idb_nvarchar2;

create table idb_varchar(
id number,name varchar(10));

insert into idb_varchar values(1,'');
insert into idb_varchar values(2,' ');
insert into idb_varchar values(3,'a');
insert into idb_varchar values(4,lpad('中',10,'中'));
insert into idb_varchar values(4,lpad('b',10,'b'));

create table idb_varchar2
(id number,name varchar2(10));

insert into idb_varchar2 values(1,'');
insert into idb_varchar2 values(2,' ');
insert into idb_varchar2 values(3,'a');
insert into idb_varchar2 values(4,lpad('中',10,'中'));
insert into idb_varchar2 values(5,lpad('b',10,'b'));

create table idb_nvarchar2(id number,name nvarchar2(10));

insert into idb_nvarchar2 values(1,'');
insert into idb_nvarchar2 values(2,' ');
insert into idb_nvarchar2 values(3,'a');
insert into idb_nvarchar2 values(4,lpad('中',20,'中'));
insert into idb_nvarchar2 values(5,lpad('b',10,'b'));


select id,name,length(name),lengthb(name) from idb_varchar;


select id,name,length(name),lengthb(name) from idb_varchar2;


select id,name,length(name),lengthb(name) from idb_nvarchar2



从网上搜索到的关于oracle中varchar,varchar2和nvarchar2的区别

from:http://wenda.so.com/q/1363325264061729
1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;
varchar2没有把所有字符都按照两字节处理
2.VARCHAR2把空串等同于null处理,而varchar仍按照空串处理;
都是把空串等同于null处理
3.VARCHAR2字符要用几个字节存储,要看数据库使用的字符集,
这一点不知怎么理解

from:http://www.cnblogs.com/flyingfish/archive/2010/01/15/1648448.html
1、NVARCHAR2(10)是可以存进去10个汉字的,如果用来存英文也只能存10个字符。
完全正确
2、而VARCHAR2(10)的话,则只能存进5个汉字,英文则可以存10个。
完全正确

蓝色字体为我的验证结论。

通过以上验证来看。我还是没发现varchar和varchar2有什么区别。除了官方文档不建议使用varchar
varchar和varchar2还有些什么区别呢?
...全文
697 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
现在 2013-07-22
  • 打赏
  • 举报
回复
varchar2是varchar的同义词。没有什么区别。
forgetsam 2013-07-20
  • 打赏
  • 举报
回复
自己打开standard包找下面这行字 subtype varchar is varchar2
Wentasy 2013-07-20
  • 打赏
  • 举报
回复
楼主的专研精神赞一个,varchar和varchar2基本上无区别。
sych888 2013-07-20
  • 打赏
  • 举报
回复
oracle有几种基本类型,其他的类型是有这些衍生的子类型或复合类型
Leon_He2014 2013-07-20
  • 打赏
  • 举报
回复
引用 1 楼 forgetsam 的回复:
自己打开standard包找下面这行字 subtype varchar is varchar2
不好意思,本人初学。 请问standard包在哪来?请给个地址
空心兜兜 2013-07-20
  • 打赏
  • 举报
回复
可能还存在计算效率上的差别

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧