字符类型的字符存储与字节存储

Oracle中存储字符常用的数据类型有char和varchar2
其中
char 是定长,最小为1,最大为2000

varchar2 是变长,最小为1,最大为4000

在使用过程中,常见的定义
col char(n)  --字节存储的默认形式
col char(n byte)   --字节存储
col char(n char)   --字符存储

col varchar2(n)  --字节存储的默认形式
col varchar2(n byte)   --字节存储
col varchar2(n char)   --字符存储

字节存储表示最长能 存储n个字节 的字符串。

字符存储表示最长能 存储n个字符 的字符串。

例:
创建表t_char
create table t_char
(col_a char(5)
,col_b char(5 char)
);

插入记录
SQL> insert into t_char values ('aaaa','aaaa');
 
1 row inserted
 
查看表两个字段的字节长度和字符长度
SQL> select length(col_a),length(col_b) from t_char;
 
LENGTH(COL_A) LENGTH(COL_B)
------------- -------------
            5             5
 
SQL> select lengthb(col_a),lengthb(col_b) from t_char;
 
LENGTHB(COL_A) LENGTHB(COL_B)
-------------- --------------
             5              5  
             
char是定长,所以占用的字节和字符一定是固定的。

插入第二条记录
SQL> insert into t_char values ('bbb11','bbb11');
 
1 row inserted

由于使用的是字母和数字组合的值,即满足5个字节又满足5个字符,能插入,看不出两个字段的区别。
下面使用中文,如果值为'数据库',会出现什么情况?

insert into t_char values ('数据库','数据库')
 
ORA-12899: 列 "SCOTT"."T_CHAR"."COL_A" 的值太大 (实际值: 6, 最大值: 5)

报错!col_a char(5) 字节长度最大为5,三个中文字符6字节超长。

所以col_a char(5) 字节长度定义 与 col_b char(5 char) 字符长度定义的区别如下
SQL> insert into t_char values ('数据1','我爱数据库');
 
1 row inserted

查看插入值的字符长度
SQL> select length('数据1'),length('我爱数据库') from dual;
 
  LENGTH('数据1')      LENGTH('我爱数据库')
--------------- --------------------
              3                    5
查看插入值的字节长度
SQL> select lengthb('数据1'),lengthb('我爱数据库') from dual;
 
  LENGTHB('数据1')      LENGTHB('我爱数据库')
---------------- ---------------------
               5                    10             
col_b char(5 char)表示最长能存储5个字符,包括中文字符,如果5个字符都是中文字符,字节长度占10个字节(字符集GBK)
 
varchar类型的定义也是类似的,不再赘述

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

转载于:http://blog.itpub.net/28929558/viewspace-1169961/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值