在Oracle 11g中使用JPA存储unicode字符
我在使用JPA将unicode字符存储到Oracle 11g时遇到问题。 当我使用这个将unicode字符串存储到DB时(someTranslation是一个包含unicode字符串的对象) 然后字符串显示为一个倒“?”(“?”) 当我使用SQLDeveloper手动修复数据库中损坏的字符串时,字符将按照预期正确显示 我已经搜索了一些,当,只有一个小的修改是需要纠正这一点。我觉得我在这篇文章上也有同样的问题,只是我用的是Oracle11g。有人知道oracle 11g中解决此问题的方法吗?提前谢谢 这是我的persistence.xml在Oracle 11g中使用JPA存储unicode字符,jpa,unicode,oracle11g,Jpa,Unicode,Oracle11g,我在使用JPA将unicode字符存储到Oracle 11g时遇到问题。 当我使用这个将unicode字符串存储到DB时(someTranslation是一个包含unicode字符串的对象) 然后字符串显示为一个倒“?”(“?”) 当我使用SQLDeveloper手动修复数据库中损坏的字符串时,字符将按照预期正确显示 我已经搜索了一些,当,只有一个小的修改是需要纠正这一点。我觉得我在这篇文章上也有同样的问题,只是我用的是Oracle11g。有人知道oracle 11g中解决此问题的方法吗?提前谢
<?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>
实体翻译
有两个可能的问题:
就Java本身而言,String类支持Unicode,并使用UTF-16编码,但是您的JDBC驱动程序应该能够处理en/解码@gerrytan感谢您的回复,我已经使用columnDefinition=“NVARCHAR2(2000)”选择了正确的字符类型NVARCHAR2,如果我在数据库中手动输入它,它确实会正确显示。问题似乎是数据在从java存储到oracle时被破坏了。我注意到有一条警告建议我使用OraclePreparedStatement.setFormOfUse(),但我不知道如何将其与JPA一起使用。您知道如何将OraclePreparedStatement.setFormOfUse()用于JPA吗?
<?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>