Chinaunix首页 | 论坛 | 博客
  • 博客访问: 247450
  • 博文数量: 58
  • 博客积分: 2017
  • 博客等级: 大尉
  • 技术积分: 680
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-07 00:15
文章分类

全部博文(58)

文章存档

2011年(1)

2010年(7)

2009年(32)

2008年(18)

我的朋友

分类: DB2/Informix

2010-03-19 16:59:24

用户升级到JDBC driver到3.50版本后,在插入数据时,有时会遇到下面的错误:
-79783 Encoding or code set not supported
java.io.IOException: Code-set conversion function failed due to illegal
sequence or invalid value.
at com.informix.lang.JavaToIfxType.doConversion
(JavaToIfxType.java:845)
at com.informix.lang.JavaToIfxType.JavaToIfxChar
(JavaToIfxType.java:145)
at com.informix.jdbc.IfxChar.fromString(IfxChar.java:298)
at com.informix.jdbc.IfxValue.a(IfxValue.java:986)
at com.informix.jdbc.IfxPreparedStatement.setString
(IfxPreparedStatement.java:1460)
at jdbc.main(jdbc.java:47)

如果用户使用JDBC3.0及其以前的版本,则顺利插入同样的数据。这种情况出现在当插入多字节字符的数据到英文字符集(如"en_us.8859-1的缺省字符集)的数据库中,并且数据中存在非法字符时。典型的情况就是用户插入中文字符中存在乱码的情况。

这是由于在JDBC3.50中,程序改变了字符集转换的处理方式。在以前的JDBC版本中,如果插入的数据中存在非法字符(如乱码字符),JDBC会将其转换为"?",并插入到数据库中。但是在JDBC3.50版本中,当程序遇到非法字符,这会抛出java.io.IOException的异常,并返回 “-79783 Encoding or code set not supported”的错误信息

在JDBC3.50JC4X1版本后,JDBC提供了一个选项,可以让用户选择遇到非法字符集时采用跟以前兼容的处理方式,具体方法为是在JDBC的链接url中,加入“IFX_USE_STRENC=true”的选项,这样JDBC在遇到非法字符集时,就会将其转换为"?",并将其插入数据库中。例如;
"jdbc:informix-sqli://inst:port:dbname:informixserver=XXX;user=informix;password=XX;DB_LOCALE=en_us.819;IFX_USE_STRENC=true;";

对于使用WAS连接数据库的用户,需要手工添加一个连接属性ifxIFX_USE_STRENC,并将其值设置为true,就可以了。

这样用户就能够顺利的插入乱码字符了。

阅读(5572) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~