我们的应用程序在weblogic 10g上运行,并通过默认的eclipselink实现支持的JPA将数据保存到oracle 9数据库中。
实体很简单:
@Entity
@Table(name="PLUGINDATA")
@SequenceGenerator(name="plugin_seq", sequenceName="PLUGINDATASEQ", initialValue = 1000, allocationSize = 50)
public class PluginData implements Serializable {
@Column(name = "data", length = 4000, nullable = false)
private String data;
@PersistenceContext(unitName = "XYZ")
protected javax.persistence.EntityManager entityManager;
entityManager.persist(entity);
当我传递包含重音字符的字符串时,它们在EJB中是可以的:
83, 116, -59, -103, 101, 100, 111, -60, -115, 101, 115, 107, -61, -67, 32, 107, 114, 97, 106
但它们在数据库中存储已损坏:
83, 116, 63, 63, 101, 100, 111, -60, 63, 101, 115, 107, 63, 63, 32, 107, 114, 97, 106
e.g。重音字符替换为问号:St??edo�?esk?? kraj
我不明白,代码没问题,数据源设置与其他正常工作的应用程序相同。有什么想法吗?
编辑1:
这是SID NLS设置(与其他应用程序数据库非常相似)
select DECODE(parameter, 'NLS_CHARACTERSET', 'CHARACTER SET', 'NLS_LANGUAGE', 'LANGUAGE', 'NLS_TERRITORY', 'TERRITORY') name, value
from v$nls_parameters
where parameter in ('NLS_CHARACTERSET', 'NLS_LANGUAGE', 'NLS_TERRITORY');
LANGUAGE ENGLISH
TERRITORY CZECH REPUBLIC
CHARACTER SET EE8ISO8859P2
编辑2:
WebLogic /数据源
连接池选项卡具有以下属性:
URL: jdbc:oracle:thin:@hostname:1521:SID
Driver: oracle.jdbc.xa.client.OracleXADataSource
Oracle标签:一切都未选中
答案 0 :(得分:1)
如果它可能是数据库中的问题。 oracle数据库不支持默认的重音字符。你必须去你的数据库运行这个“select * from NLS_DATABASE_PARAMETERS;”
如果您将NLS_LANGUAGE设置为AMERICAN,则表格中不能包含特殊字符(é,è,ê等...)
解决此问题
在Windows中:HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE \ KEY_O10R2 \ NLS_LANG = FRENCH_FRANCE.WE8MSWIN1252
在Linux中:设置NLS_LANG = FRENCH_FRANCE.WE8PC850
答案 1 :(得分:0)
查看原始字符串与存储字符串,模式是所有字符> 0x7f存储为0x3f(63)。这是转换为US-ASCII(或其他一些没有字节0x80-0xff的代码点的字符集)的典型情况。
这肯定是某个地方的字符编码问题。您指定的未编码的字符不在ISO-8859-2中,这是您为NLS配置的字符集。
您可以尝试使用ISO-8859-1(WE8ISO8859P1),例如FRENCH_FRANCE.WE8ISO8859P1(如果你想把语言保持为捷克语,则为CZECH_CZECH REPUBLIC.WE8ISO8859P1)。 WE8MSWIN1252比8859-1更完整。
如果你的数据库支持它,你也可以做CZECH_CZECH REPUBLIC.UTF8。
答案 2 :(得分:0)
好的,它终于有效了。你们都是对的,这是区域问题。尽管如此,这是weblogic问题,而不是数据库。我尝试在不同的weblogic上运行的示例代码与同一个数据库运行顺利。然后我比较了shell环境和正确的weblogic将LANG设置为UTF-8。当我将以下行添加到setDomainEnv.sh并重新启动weblogic时,它开始正常工作。谢谢你的帮助。
export LANG=en_US.utf8