在 Oracle 中生成新的 XMLTYPE 时保留 UTF8 编码
Keep UTF8 encoding when generating a new XMLTYPE in Oracle
我有一个游标,可以从 table 中检索文本。
然后我有一个 FOR .. 循环在该游标上迭代,并创建一个 XMLTYPE,如下所示:
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>');
UTF-8 编码的文本在 REC.DESCRIPTION 字段中。如果我将此文本直接插入另一个 table,编码将保持正确。
但是,当我在另一个 table 中插入 XMLTYPE 时,编码丢失了:
<I18NElement>
<i18nElementType>Hotel</i18nElementType>
<key>GUESTI@1036@Hotel@GUESTI#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>
原文如下:
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.
我已经尝试了与 UTL_I18N
实用程序的各种组合,到目前为止没有任何效果。
数据库 NLS_CHARACTERSET
设置为 AL32UTF8
。
如果您能提供给我任何信息,我们将不胜感激!我在 Whosebug 中发现了很多相关问题,但 none 到目前为止对我有用 ...
原来是 Toad (12.1) XMLTYPE 弹出式编辑器出于某种原因没有显示正确编码的文本。数据插入正确,使用 SQL Developer 没有编码问题。
编辑:不知何故,它看起来像取决于软件版本和 OS。我们有一台机器,Toad 9.7 的编码看起来不错(我有 12.1),另一台机器的 SQL Developer 4.2 和 Ubuntu 也很好,还有一台机器的 none这些显示了正确的编码(这里是 SQL Developer 和 Toad 的屏幕截图):
幸运的是,数据库似乎没有问题,因为我们的 UTF-8 Java 应用程序显示了正确的编码。
虽然有大量时间被扔进了垃圾箱。
我有一个游标,可以从 table 中检索文本。 然后我有一个 FOR .. 循环在该游标上迭代,并创建一个 XMLTYPE,如下所示:
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>');
UTF-8 编码的文本在 REC.DESCRIPTION 字段中。如果我将此文本直接插入另一个 table,编码将保持正确。 但是,当我在另一个 table 中插入 XMLTYPE 时,编码丢失了:
<I18NElement>
<i18nElementType>Hotel</i18nElementType>
<key>GUESTI@1036@Hotel@GUESTI#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>
原文如下:
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.
我已经尝试了与 UTL_I18N
实用程序的各种组合,到目前为止没有任何效果。
数据库 NLS_CHARACTERSET
设置为 AL32UTF8
。
如果您能提供给我任何信息,我们将不胜感激!我在 Whosebug 中发现了很多相关问题,但 none 到目前为止对我有用 ...
原来是 Toad (12.1) XMLTYPE 弹出式编辑器出于某种原因没有显示正确编码的文本。数据插入正确,使用 SQL Developer 没有编码问题。
编辑:不知何故,它看起来像取决于软件版本和 OS。我们有一台机器,Toad 9.7 的编码看起来不错(我有 12.1),另一台机器的 SQL Developer 4.2 和 Ubuntu 也很好,还有一台机器的 none这些显示了正确的编码(这里是 SQL Developer 和 Toad 的屏幕截图):
幸运的是,数据库似乎没有问题,因为我们的 UTF-8 Java 应用程序显示了正确的编码。
虽然有大量时间被扔进了垃圾箱。