char, varchar2, nchar, nvarchar2



本文主要比较一下char、varchar2、nchar、nvarchar2的区别。

1.字符集不同

数据库在创建的时候会指定两个字符集,Character set 和 NCHAR Character set;
char、varchar2用Character set存储;
nchar、nvarchar2用NCHAR Character set存储

  1. select * from database_properties where property_name like '%CHARACTERSET%';


2.定义长度&实际存储长度
char:定长字符,字符的长度如果达不到定义的长度,则补空格填满定义长度,即 字符补空格后长度=定义长度
varchar2:变长字符,字符长度可能没有定义的长,即 字符长度<=定义长度

  1. create table t_char_test1
    (
      c1 char(10),
      c2 varchar2(10)
    );

    insert into t_char_test1(c1, c2) values('中文1', '中文1');
    commit;

    select dump(c1, 16), dump(c2, 16) from t_char_test1;

c1(char)的值占了7个byte,后面补了3个空格(20),一共10个byte;
c2(varchar2)的值占了7个byte;

nchar、nvarchar2占用空间大小的区别 与 char、nvarchar2一样,不再比较。

3.字节长度&字符长度

varchar2默认指定长度的单位为 byte,4个中文已经超过10个byte,所以插入报错;char类型也是一样。
  1. create table t_char_test2
    (
      c1 varchar2(10)
    );

    insert into t_char_test2(c1) values('中文中文');
    commit;



nvarchar2指定长度的单位为 字符,所以可以插入10个中文字符
  1. create table t_char_test3
    (
      c1 nvarchar2(10)
    );

    insert into t_char_test3(c1) values('中文');
    insert into t_char_test3(c1) values('中文中文中文中文中文');
    commit;

    select dump(c1, 16) from t_char_test3;


不过nvarchar2还是会受最大4000 bytes的限制,即 字符 所占用的空间 最大不能超过4000个byte,而一个字符占几个byte是由NCharacter set决定的。
NCharacter set可以选择两种字符集,UTF8、AL16UTF16;
UTF8为变长字符集,在定制字段类型的时候可以指定最大长度为4000,但实际能存储最大字符数据可能不到4000,如果全存中文,最多存1333个字符,如果全存英文则可以存4000个字符;
AL16UTF16为定长字符集,任何一个字符都用2个byte存储,所以在定义字段长度的时候最大只能是2000。

4.以下是Oracle Database SQL Reference中的描述





来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7417681/viewspace-2124782/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7417681/viewspace-2124782/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值