分类: 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,就可以了。
这样用户就能够顺利的插入乱码字符了。