Oracle DB,Glassfish,Hibernate和字符编码

时间:2012-02-03 16:39:06

标签: oracle hibernate glassfish

我们有一个使用UTF-8的Oracle DB(NLS_CHARACTERSET = AL32UTF8)。 然后我们在Glassfish中使用了一个使用Hibernate的J2EE应用程序。

使用SQL Plus或SQL Developer时,我们可以正确读取和写入数据,但我们无法以编程方式获取特殊字符。

阅读ä我们得到√§

看着我尝试的类似问题:

  • 调整Hibernate属性

    <property name="hibernate.connection.characterEncoding" value="utf8" />
    

  • 在Glassfish中添加defaultNChar=true连接属性

  • 通过Hibernate添加defaultNChar连接属性

    <property name="hibernate.connection.defaultNChar" value = "true"/>
    
  • 将字符集设置为utf8

    <property name="hibernate.connection.charSet" value="utf8" />
    

但是我仍然无法获得任何非基本ASCII的字符。

任何暗示我做错了什么?

编辑:使用get我的意思是使用select语句进行提取。使用调试器进行检查或使用断言与正确的(例如"ä")字符串进行比较。

3 个答案:

答案 0 :(得分:1)

正如使用NVARCAR对原始问题的评论中所讨论的那样,添加到Hibernate配置文件的以下行似乎有效。

<property name="hibernate.connection.defaultNChar">true</property>

它为我做了。

答案 1 :(得分:0)

您没有从数据源声明中说出有关您的连接URL的任何信息。您是否尝试在连接网址上设置编码?

JDBC:MySQL的://本地主机:3306 / yourDB的了useUnicode =真安培;的characterEncoding = UTF-8

我无法测试oracle,但是对于mysql,它解决了这个问题。

答案 2 :(得分:0)

正如评论中所述,我意识到问题没有意义,因为数据库连接实际上没有问题。正如meta-discussion中所建议的那样,我将其解释为答案。