oracle 不同字符集,中文所占用的字节不同

在做ETL的时候,经常有一些字段提示长度不够。今天偶抓住一张表来分析了一下,后来发现中文在不同字符集所占用的字节是不同的。详细如下:

源数据库字符集为: ZHS16GBK,数据仓库的字符集为:UTF-8

查询字符集:SELECT * FROM DATABASE_PROPERTIES WHERE property_name = 'NLS_CHARACTERSET'

源数据库:(ZHS16GBK)

SQL >   SELECT   ' 中文 ' , length( ' 中文 ' ) x, lengthb( ' 中文 ' ) xb  FROM  dual;

' 中文 '           X         XB
-- ---- ---------- ----------
中文             2            4

目标数据库:(UTF8)

SQL >   SELECT   ' 中文 ' , length( ' 中文 ' ) x, lengthb( ' 中文 ' ) xb  FROM  dual;

' 中文 '                 X         XB
-- ---------- ---------- ----------
中文                   2            6

 

做了一个表测试了一下:

在源数据库里:

SQL >   create   table  cntable(fname  varchar2 ( 4 ));

Table  created

SQL
>   insert   into  cntable(fname)  values ( ' 张三 ' );

1  row inserted

在目标数据仓库里:

SQL >   create   table  cntable(fname  varchar2 ( 4 ));

Table  created

SQL
>   insert   into  cntable(fname)  values ( ' 张三 ' );

insert   into  cntable(fname)  values ( ' 张三 ' )

ORA
- 12899 : value too large  for   column  "HUB"."CNTABLE"."FNAME" (actual:  6 , maximum:  4 )

 

很显然中文在UTF8里占3个字节,ZHK里占2个字节。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值