Search the FirstSpirit Knowledge Base
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.
Wenn dann allerdings ein Redakteur diesen Datensatz über FS ändert, wird das Sonderzeichen
falsch in die DB gespeichert.
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
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. 🙂
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.
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.
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.
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. 🙂