2012-02-03 90 views
1

我们有一个使用UTF-8(NLS_CHARACTERSET = AL32UTF8)的Oracle数据库。 然后,我们在使用Hibernate的Glassfish中有一个J2EE应用程序。Oracle DB,Glassfish,休眠和字符编码

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

读取一个ä我们得到√§

看着我试过类似的问题:

  • 调整Hibernate属性

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

  • 加入defaultNChar=true连接支柱erty在Glassfish的

  • 通过Hibernate

    <property name="hibernate.connection.defaultNChar" value = "true"/> 
    
  • 设置的字符集添加defaultNChar连接属性设置为utf8

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

但我还是没能得到任何字符,其不是基本的ASCII。

任何暗示我做错了什么?

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

+0

你能定义“get”吗?你无法查看字符,或者无法从数据库中选择它们吗? – Ben 2012-02-05 17:41:50

+0

@Ben:你是对的:我编辑了澄清问题。选择该值并以编程方式或使用调试器进行检查。 – Matteo 2012-02-05 19:08:14

+0

@Matteo是nvarchar字段中的数据吗? – tbone 2012-02-06 20:12:57

回答

0

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

0

你没有在数据源声明中提到你的连接URL。您是否尝试在连接网址上设置编码?

jdbc:mysql:// localhost:3306/yourDB? useUnicode = true & characterEncoding = UTF-8

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

+1

URL中的编码是MySQL的具体。 Oracle JDBC驱动程序不允许它(URL格式:'jdbc:oracle:thin:@ // [HOST] [:PORT]/SERVICE')。 – Matteo 2012-02-06 06:55:14

1

正如在使用NVARCAR的原始问题的注释中所讨论的那样,添加到Hibernate配置文件中的以下行似乎可行。

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

它为我做了。