2016-06-16 9 views
0

Ich habe einen Cursor, der Text aus einer Tabelle abruft. Ich habe dann eine FOR .. LOOP dass Iterierten auf diesem Cursor und ein XMLTYPE erzeugt, wie folgt aus:Behalten UTF8-Codierung beim Generieren eines neuen XMLTYPE in Oracle

TRANSLATION := XMLTYPE('<I18NElement> 
          <i18nElementType>'||ELEMENTTYPE||'</i18nElementType> 
          <key>'||REC.CODE||'</key> 
          <languageCode>'||REC.CODIDI||'</languageCode> 
          <i18nField> 
          <fieldName>commercialName</fieldName> 
          </i18nField> 
          <i18nField> 
          <fieldName>description</fieldName> 
          <translation><![CDATA['||REC.DESCRIPTION||']]></translation> 
          </i18nField> 
          <isDefault>'||BOOLEANDEFAULT||'</isDefault> 
         </I18NElement>'); 

Die UTF-8 kodierten Text im REC.DESCRIPTION Feld ist. Wenn ich diesen Text direkt in eine andere Tabelle einfüge, wird die Codierung korrekt beibehalten. Allerdings, wenn ich die XMLTYPE in einer anderen Tabelle einfügen, wird die Codierung verloren:

<I18NElement> 
    <i18nElementType>Hotel</i18nElementType> 
    <key>[email protected]@[email protected]#1036</key> 
    <languageCode>ES</languageCode> 
    <i18nField> 
    <fieldName>commercialName</fieldName> 
    </i18nField> 
    <i18nField> 
    <fieldName>description</fieldName> 
    <translation><![CDATA[Hotel de playa de 3 estrellas, de gestión familiar desde 1964. Larga experiéncia el en trato familiar con el cliente. Situado en Malgrat de Mar, Costa Barcelona-Maresme, a 80 Km del aeropuerto de Barcelona y a 40 Km del de Girona. 

Este hotel, está compuesto por un edificio principal de cuatro plantas y otro anexo de dos, contiene un total de 227 habitaciones. Está situado a solamente 50 metros de la playa y del paseo marítimo y el centro del pueblo está a una distancia de 400 metros.]]></translation> 
    </i18nField> 
    <isDefault>true</isDefault> 
</I18NElement> 

Hier ist der Originaltext:

Hotel de playa de 3 estrellas, de gestión familiar desde 1964. Larga experiéncia el en trato familiar con el cliente. Situado en Malgrat de Mar, Costa Barcelona-Maresme, a 80 Km del aeropuerto de Barcelona y a 40 Km del de Girona. 

Este hotel, está compuesto por un edificio principal de cuatro plantas y otro anexo de dos, contiene un total de 227 habitaciones. Está situado a solamente 50 metros de la playa y del paseo marítimo y el centro del pueblo está a una distancia de 400 metros. 

ich alle Arten von Kombinationen mit UTL_I18N Dienstprogramme versucht haben, nichts ist so weit zu arbeiten. Die Datenbank NLS_CHARACTERSET ist auf AL32UTF8 eingestellt.

Alle Informationen, die Sie mir zur Verfügung stellen können, würden sehr geschätzt werden! Ich habe eine Menge verwandter Fragen in Stackoverflow gefunden, aber bisher hat keiner für mich funktioniert ...

+0

Welcher Datentyp ist die Spalte, in die Sie einfügen - XMLType, CLOB, NCLOB? Wenn NCLOB (oder NVARCHAR2, weniger wahrscheinlich), was ist Ihr nationaler Zeichensatz? Wie werden Sie den ursprünglichen Wert und den gespeicherten Wert nach dem Einfügen abfragen und anzeigen? –

+0

Es ist eine XMLTYPE-Spalte. Ich frage mich, ob es ein Toad-Problem ist (ich führe das Skript von dort aus). Ich werde es mit SQL Developer versuchen. – LeoLozes

Antwort

2

Es stellte sich heraus, dass der Toad (12.1) XMLTYPE Popup-Editor den Text aus irgendeinem Grund nicht richtig codiert zeigt . Die Daten werden korrekt eingefügt, mit SQL Developer gibt es kein Codierungsproblem.

Bearbeiten: Irgendwie scheint es, dass es auch von Softwareversionen und OS abhängt. Wir haben eine Maschine, auf der die Kodierung mit Toad 9.7 gut aussieht (ich habe die 12.1), eine andere mit SQL Developer 4.2 und Ubuntu, wo es auch gut ist, und eine andere, wo keine die richtige Kodierung zeigt (hier ein Screenshot mit SQL Entwickler und Toad):

enter image description here

Glücklicherweise scheint es, dass die Datenbank ist in Ordnung, da unsere UTF-8 Java-Anwendung die richtige Codierung zeigt.

Es wurde jedoch eine beträchtliche Menge an Stunden in den Mülleimer geworfen.

+0

Liegt das an den Einstellungen für das Gebietsschema des Betriebssystems und/oder Toad? –

Verwandte Themen