在Oracle 11g中使用JPA存储unicode字符

时间:2013-07-28 21:20:24

标签: jpa unicode oracle11g

我在使用JPA将unicode字符存储到Oracle 11g时遇到问题。 当我使用这个将unicode字符串存储到DB时(someTranslation是一个包含unicode字符串的对象)。

someTranslation.setMessage("文字"); //literally means characters
em.persist(someTranslation);

然后字符串显示为倒置'?' ( “¿”)

当我使用SQLDeveloper在DB中手动修复损坏的字符串时,字符会按照预期正确显示。

我搜索了一下,当using MySQL时,只需要进行一些小修改就可以解决这个问题。我觉得我的帖子有同样的问题,除了我使用的是oracle 11g。有没有人知道oracle 11g中这个问题的解决方案?提前谢谢。

这是我的persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="cbpejb" transaction-type="JTA">
    <class>entity.Translation</class>
    <properties>
        <property name="openjpa.ConnectionDriverName" value="oracle.jdbc.OracleDriver" />
        <property name="openjpa.ConnectionURL" value="jdbc:oracle:thin:@localhost:1521:orcldb" />
        <property name="openjpa.ConnectionUserName" value="dev" />
        <property name="openjpa.ConnectionPassword" value="dev00" />
        <property name="openjpa.jdbc.Schema" value="DEV" />
    </properties>
</persistence-unit>

1 个答案:

答案 0 :(得分:2)

有两个可能的问题:

  1. 您选择了错误的数据库列类型(例如:db column / configuration不支持多字节字符)。在Oracle中,您需要use NCHAR / NVARCHAR
  2. 您选择了正确的列类型,但未正确显示
  3. 从Java本身开始,String类支持Unicode,并使用UTF-16编码,但是你的JDBC驱动程序应该处理en / decoding