我在使用JPA将unicode字符存储到Oracle11g时遇到问题。当我使用这个将unicode字符串存储到DB时(someTranslation是一个包含unicode字符串的对象)。
someTranslation.setMessage("文字"); //literally means characters
em.persist(someTranslation);
然后字符串显示为倒置的"?"("?")
当我使用SQLDeveloper手动修复数据库中损坏的字符串时,字符会正确显示。
我已经搜索过,当使用MySQL时,只需要进行一个小的修改就可以纠正这一点。我觉得我对那个帖子也有同样的问题,只是我用的是oracle11g。有人知道Oracle11g中这个问题的解决方案吗?提前谢谢。
这是我的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>
有两个可能的问题:
- 您选择了错误的数据库列类型(例如:db列/配置不支持多字节字符)。在Oracle中,您需要使用NCHAR/NVARCHAR
- 您选择了正确的列类型,但没有正确显示它
就Java本身而言,String类支持Unicode,并使用UTF-16编码,但JDBC驱动程序应该处理对的解码