0

私たちのアプリケーションは 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

たとえば、アクセント付きの文字は疑問符に置き換えられます。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 タブ: すべてがチェックされていません

4

3 に答える 3

0

わかりました、それは最終的に動作します。それはロケールの問題であることは、皆さん正しかったです。それにもかかわらず、それはデータベースではなく weblogic の問題でした。同じデータベースに対して別の weblogic でサンプル コードを実行してみましたが、スムーズに実行されました。次に、シェル環境を比較したところ、正しい weblogic では LANG が UTF-8 に設定されていました。以下の行を setDomainEnv.sh に追加して weblogic を再起動すると、正しく動作するようになりました。ご協力ありがとうございます。

export LANG=en_US.utf8
于 2013-08-20T15:57:52.840 に答える