自: http://space.itpub.net/3326/viewspace-566992
今天突然想研究研究jdbc读异体字的问题,官方文档上,居然让我看到了这样一段话,一直的想法就是想让jdbc和数据库读取时不发生字符集转换来实现,看来希望没有了
In versions of the Oracle JDBC drivers prior to 10g release 1(10.1), there were performance advantages to usingoracle.SQL.CHAR. In Oracle Database 10g, there are no longerany such advantages. In fact, optimum performance is achievedusing java.lang.String. All Oracle JDBC drivers handle all character data in the Java UCS2 character set. Using
oracle.sql.CHAR does not prevent conversions between the database character set and UCS2.
其实造成异体字的主要原因是:
oracle数据库服务端和客户端的字符集一致时,当客户端输入的字符不是 数据库字符集所包含的字符时,oracle数据库由于客户端服务器端字符集一致,不做字符集转换,直接将编码存入数据库中.在读取的时候,如果客户端和服务端的字符集一致,数据库直接将编码返回,客户端操作系统只要支持该字符,显示就是正常的,
但是如果客户端和服务端字符集不一致,这时候,数据库服务器将进行字符集转换,但是该字符本身是不存在的,所以就会出现‘?’这种情况了.
jdbc从oracle10g开始,都是通过unicode进行转换的,无法避免,所以会导致出现即使网页或客户端是支持该字符的情况,返回的也还是‘?’.