oracle字符集

本文给大家讲述下遇到的oracle字符集的问题。

前些日子公司刚刚把oracle10g升级到11g,在运行项目的时候是正常的,突然发现只有在使用oracle存储过程新增的时候报空指针异常。

开始以为是客户端的值没有传成功,经过调试,发现java数组转oracle对象的时候出现乱码。于是执行命令select * from nls_database_parameters,显示字符集ZHS16GBK,原来的10G的字符集是AL32UTF8,终于找到了症结所在,是字符集的问题。


下面是最初oracle对象定义:

 CREATE TYPE type_name AS OBJECT(
   username varchar(20)
 )

为了解决问题,网上了很多资料,花了很多步骤


1.原先以为是ORACLE驱动包的问题,升级了ojdbc.jar,发现没有解决。


2.根据网上资料介绍说是要引入包nls_charset12.jar和orail18n.jar,于是我又下载了并引入,


发现不是报Java.lang.NoSuchMethodError: oracle.i18n.text.converter.CharacterConverterOG

就是项目运行不了。依然没法解决。

3.皇天不负有心人终于我把varchar2改成nvarchar2完美解决。

最后的对象定义(正确解决):

 CREATE TYPE type_name AS OBJECT( 
 username nvarcahr2(20)
 )

最后说一下varchar2与nvarchar2的区别

NVARCHAR2和VARCHAR2的区别,从使用角度来看区别在于:NVARCHAR2在计算长度时和字符集相关的,例如数据库是中文字符集时以长度10为例,则

1、NVARCHAR2(10)是可以存进去10个汉字的,如果用来存英文也只能存10个字符。

2、而VARCHAR2(10)的话,则只能存进5个汉字,英文则可以存10个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值