Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA:重音字符另存为?在数据库中_Java_Jpa_Jdbc_Internationalization - Fatal编程技术网

Java JPA:重音字符另存为?在数据库中

Java JPA:重音字符另存为?在数据库中,java,jpa,jdbc,internationalization,Java,Jpa,Jdbc,Internationalization,我们的应用程序运行在weblogic 10g上,并通过默认eclipselink实现支持的JPA将数据持久化到oracle 9数据库中 实体很简单: @Entity @Table(name="PLUGINDATA") @SequenceGenerator(name="plugin_seq", sequenceName="PLUGINDATASEQ", initialValue = 1000, allocationSize = 50) public class PluginData impleme

我们的应用程序运行在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设置(与另一个应用程序数据库非常相似)

编辑2:

WebLogic/数据源

“连接池”选项卡具有以下属性:

URL: jdbc:oracle:thin:@hostname:1521:SID 
Driver: oracle.jdbc.xa.client.OracleXADataSource

Oracle选项卡:所有内容都未选中

查看原始字符串和存储字符串,模式是所有>0x7f的字符都存储为0x3f(63)。这是转换为US-ASCII(或其他没有字节0x80-0xff代码点的字符集)的典型转换

这肯定是某个地方的字符编码问题。您指定的未编码字符不在ISO-8859-2中,ISO-8859-2是您为其配置NLS的字符集

您可以尝试ISO-8859-1(WE8ISO8859P1),例如法语为法语。WE8ISO8859P1(或捷克语为捷克语。如果您想将语言保留为捷克语,请尝试使用WE8ISO8859P1)。WE8MSWIN1252比8859-1更完整


如果您的数据库支持捷克共和国.UTF8,您也可以使用它。

如果它可能是数据库中的问题。oracle数据库默认不支持重音字符。您必须转到数据库运行此“从NLS_数据库_参数中选择*

如果将NLSèU语言设置为AMERICAN,则表中不能有特殊字符(é、è、è等)

要解决这个问题,

在windows中:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_O10R2\NLS_LANG=FRENCH_FRANCE.WE8MSWIN1252


在Linux中:设置NLS_LANG=FRENCH_FRANCE.WE8PC850

好的,它最终会工作。你们都是对的,这是语言环境的问题。尽管如此,这是weblogic问题,而不是数据库问题。我尝试了在同一个数据库的不同weblogic上运行的示例代码,结果运行顺利。然后我比较了shell环境和正确的weblogic设置为UTF-8。当我向setDomainEnv.sh添加以下行并重新启动weblogic时,它开始正常工作。谢谢你的帮助

export LANG=en_US.utf8

在存储数据之前,如何设置数据的值?您的表/db排序规则设置为什么?您是否能够在连接属性中设置字符编码?如果是,它设置为什么?数据是通过setter设置的,它的内容在持久化之前是有效的。我不以任何方式操纵连接。我只是让应用服务器设置EntityManager。如果您将字符集设置为WE8ISO8859P1(即ISO-8859-1),它是否有效?数据中未正确编码的字符实际上不在EE8ISO8859P2(ISO-8859-2)中。我同意你的看法。但我不知道它发生在哪里,如何避免。其他应用程序以相同的方式实现和部署,并且工作正常。这对我来说是个谜。您的评论排除了应用程序逻辑中的问题以及排序问题。它必须是连接设置,或者EclipseLink(我从未使用过)正在进行某种转换。您的数据库连接字符串/设置是什么(不要发布您的主机、用户名或密码)?在哪里?在数据库SID中?数据库/weblogic?的外壳环境取决于您的平台。它们都是在我在另一台机器(linux)上运行代码时描述的,并且还可以。我必须在周一调查这台本地机器和客户机器之间的差异。一个是显而易见的:HP-UX。我祈祷这将是weblogic外壳环境,因为我不能触摸数据库。他的原始数据中的重音字符也将被WE8ISO8859P1覆盖;实际上,他目前的套装EE8ISO8859P2中没有这些。
export LANG=en_US.utf8