但行好事
莫论前程❤

Oracle学习笔记—-char、varchar和varchar2的区别

  • varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节;
  • varchar2把空串等同于null处理,而varchar仍按照空串处理;
  • varchar2字符要用几个字节存储,要看数据库使用的字符集.
  • 目前VARCHARVARCHAR2的同义词。如果你想有向后兼容的能力,Oracle建议使用VARCHAR2而不是VARCHAR。

char和varchar2的区别

  • char是固定长度,varchar2varchar都是可变长度
  • VARCHAR2CHAR节省空间,在效率上比CHAR会稍微差一些
  • VARCHAR2虽然比CHAR节省空间,但是如果一个VARCHAR2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用CHAR代替VARCHAR2会更好一些。
比如一个类型是char(10),varchar2(10)

当你输入一个字符串aaa

char里还是占10位,后边的7位补空格

varchar2varchar只占3位

测试

create table test1(a char(10),b NUMBER(10) NOT NULL);
insert into test1 values ( '   ','1000000001' );(第一个字段为三个空格)
insert into test1 values ( 'aaa','1000000002' );
insert into test1 values ( 'bbb','1000000003' ); 


select replace(test1.A,' ','空格') as a,test1.B as b from test1;
----------------------------------
空格空格空格空格空格空格空格空格空格空格         1000000001
aaa空格空格空格空格空格空格空格                   1000000002
bbb空格空格空格空格空格空格空格                   1000000003
drop table test1
create table test1(a varchar2(10),b NUMBER(10) NOT NULL);
insert into test1 values ( '   ','1000000001' );
insert into test1 values ( 'aaa','1000000002' );
insert into test1 values ( 'bbb','1000000003' );


select replace(test1.A,' ','空格') as a,test1.B as b from test1;
-----------------------------------------
空格空格空格  1000000001
aaa         1000000002
bbb         1000000003
赞(1) 打赏
未经允许不得转载:刘鹏博客 » Oracle学习笔记—-char、varchar和varchar2的区别
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏