Oracle数据库的编码问题

一直没有意识到数据库的编码,这一次,碰到了一个很奇特的问题,varhcar2的字段存中文都是乱码,nvarhcar2用sql插入的中文也是乱码,几经折腾,才知道

Oracle数据库在安装的时候,是可以指定编码,其中有两种编码要指定

NLS_CHARACTERSET     US7ASCII

NLS_NCHAR_CHARACTERSET     AL16UTF16

 

而碰到的数据库设置的编码就是上面的情况,这也解析了varchar2不能存中文的原因,US7ASCII是不支持中文的

而nvarchar2用sql插入中文是乱码却是编码上的问题

 

他需要在指定参数时告诉oracle,这个参数的类型是nchar,这样被插入的数据才被编码为AL16UTF16,不会出现乱码的情况,代码如下

 

OraclePreparedStatement orastmt =(OraclePreparedStatement)conn.prepareStatement(
"insert into table1 (column1) values(?)");
// Bind the 3rd parameter to NVARCHAR2 form so that the data is stored as unicode
orastmt.setFormOfUse(1,OraclePreparedStatement.FORM_NCHAR);
orastmt.setString(1,"便");
orastmt.executeUpdate();
orastmt.close();

 

 

 在.net中也是如此才能避免这个问题,当然 "NLS_CHARACTERSET" 不被设为 "US7ASCII" 而是GBK什么的,在中文环境的,varhcar2也是可以存储中文,关于这一点还没有机会验证

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值