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也是可以存储中文,关于这一点还没有机会验证

你可能感兴趣的:(oracle,sql,.net)