MKloss
Returning Observer

Sonderzeichen Oracle DB

Jump to solution

Hallo zusammen,

wir haben ein Problem mit unseren Datenquellen.

Wir verwenden eine Oracle 12.1.0.2.0 Datenbank.

Characterset ist wie folgt eingestellt (Standard in der Firma für alle):

NLS_NCHAR_CHARACTERSET   AL16UTF16

NLS_CHARACTERSET                 WE8ISO8859P1

Das betroffene Feld ist als NVARCHAR2(64 CHAR) angelegt.

Wenn wir die DB extern befüllen (also nicht über FS) dann können wir mit Sondernzeichen arbeiten

und diese werden auch korrekt in FS dargestellt.

2020-10-09_10h41_33.png

Wenn dann allerdings ein Redakteur diesen Datensatz über FS ändert, wird das Sonderzeichen

falsch in die DB gespeichert.

2020-10-09_10h42_31.png

Server-Eigenschaften Datenbanken :

jdbc.DRIVER=oracle.jdbc.OracleDriver

jdbc.PASSWORD=geheim

jdbc.SCHEMA=FSPRT_19

jdbc.URL=jdbc:oracle:thin:@//XXX:XXX/I60WIP

jdbc.USER=FSPRT_19

jdbc.layerclass=de.espirit.or.impl.oracle.OracleLayer

module=JDBC_ORACLE_RAC

Jemand einen Tipp in welchem Bereich ich den Fehler suchen muss?

Muss das Characterset wirklich in der DB angepasst werden für FS,

andere Anwendungen kommen mit dem Characterset und Sonderzeichen auch klar.

Gruß,

Mathias

1 Solution

Accepted Solutions
MKloss
Returning Observer

Wir haben jetzt ein Schema in einer anderen Oracle-DB von uns bekommen.

NLS_CHARACTERSET                   WE8MSWIN1252

NLS_NCHAR_CHARACTERSET     AL16UTF16

Hier klappt es jetzt mit den Sonderzeichen, zumindestens mit denen die wir bisher benötigen.

Sollten wir nächstes Jahr auf Oracle 19c umsteigen, komme ich vielleicht auf deine Unterstützung zurück. 🙂

View solution in original post

4 Replies
plaga
I'm new here

Im Rahmen der Einführungsphase für die Oracle-Database-19c-Unterstützung bin ich ab und zu hier in der Community und stolperte deswegen über deine Frage, Matthias. Meine Antwort, die mit einem datenbank-erfahrenen Kollegen abgestimmt ist:

Die angegebene Datenbank-Konfiguration entspricht nicht der e-Spirit-Empfehlung. In unserer Dokumentation (1) steht:

Unicode: Bei der Installation einer Oracle-Datenbank sollte die UNICODE-Unterstützung aktiviert werden, um alle internationalen Zeichen darstellen zu können. Beim Anlegen der Oracle-Instanz müssen dazu beim Create-Database-Statement die folgenden Parameter gesetzt werden:

NLS_CHARACTERSET: AL32UTF8

NLS_NCHAR_CHARACTERSET: AL16UTF16

Der verwendete NLS_CHARACTERSET "WE8ISO8859P1" ist ein Acht-Bit-Zeichensatz und er wird unvermeidlich manche Zeichen nicht darstellen können.

Eventuell könnte es helfen, auf Oracle Database 19c zu wechseln und diese im NVARCHAR2-Layer-Modus zu betreiben. Mögliche Konfigurationen wären dann:

jdbc.oracle.CHARACTERSET=AL16UTF16

jdbc.MAXSTRINGLENGTH=2000

oder EXTENDED

jdbc.oracle.CHARACTERSET=AL16UTF16

jdbc.MAXSTRINGLENGTH=16383

Siehe unsere Dokumentation​ (2) mit kurzen Erläuterungen zu NVARCHAR2 im Oracle19c-Layer.

0 Kudos
MKloss
Returning Observer

Entschuldige die späte Rückmeldung, vielen Dank schon mal für die Antwort.

VARCHAR2 kann bei "WE8ISO8859P1" das Sonderzeichen nicht speichern, das ist korrekt.

Was ich aber nicht verstehe, über FS werden die Felder als NVARCHAR2 angelegt, welche AL16UTF16 verwenden.

NVARCHAR2 kann die Sonderzeichen auch Speichern und FS kann diese dann auch Anzeigen, nur das Zurückschreiben von FS funktioniert nicht.

Ist das dann nicht eher eine falsche Einstellung im Client?

Oracle 19c ist leider momentan noch keine Option für uns.

0 Kudos

Leider kann ich nur versuchen, bei der Oracle19c-Einführungsphase zu unterstützen. Ist eine Umstellung darauf keine Option, so kann ich nur an den e-Spirit Technical Support verweisen.

0 Kudos
MKloss
Returning Observer

Wir haben jetzt ein Schema in einer anderen Oracle-DB von uns bekommen.

NLS_CHARACTERSET                   WE8MSWIN1252

NLS_NCHAR_CHARACTERSET     AL16UTF16

Hier klappt es jetzt mit den Sonderzeichen, zumindestens mit denen die wir bisher benötigen.

Sollten wir nächstes Jahr auf Oracle 19c umsteigen, komme ich vielleicht auf deine Unterstützung zurück. 🙂