hibernate+mysql的中文写入问题

来源:互联网 发布:电脑数据存储方案 编辑:程序博客网 时间:2024/04/27 14:19

今天折腾了一天了.
英文版win xp ,时区已设为中国,系统字符集已确认是gbk
jdb1.4.2
mysql 4.0.18 + mysql-connector-java-3.0.11-stable-bin.jar
hibernate 2.1

mysql的default_charater_set=gbk
jdbc的url=jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=gbk

DB中有正常的中文数据.
从数据库中读取已有的中文数据正常: po.getName()可打印出正常中文.

我在源码中,如果用po.setName(new String("中文".getBytes("GBK"),"ISO_8859_1")),是可以写入DB的. 只是变成了"????"号.
如果直接po.setName("中文"),写入时则报StringIndexOutOfBoundsException.
如果po.setName(other正常po.getName()),写入报StringIndexOutOfBoundsException.

各位可否指点一下?

附log:
中文
java.lang.StringIndexOutOfBoundsException: String index out of range: 4
        at java.lang.String.charAt(String.java:444)
        at com.mysql.jdbc.StringUtils.escapeSJISByteStream(StringUtils.java:340)

        at com.mysql.jdbc.StringUtils.getBytes(StringUtils.java:117)
        at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:1142)
        at org.apache.commons.dbcp.DelegatingPreparedStatement.setString(DelegatingPreparedStatement.java:243)
        at net.sf.hibernate.type.StringType.set(StringType.java:26)

原创粉丝点击