es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Informix db clob con caracteres utf-8 almacena datos incompletos.

Estoy enfrentando un problema con mi base de datos Informix mientras almaceno datos CLOB con caracteres UTF-8. El tipo de dato varcharchar regular con caracteres UTF-8 se almacena sin problemas; sin embargo, cuando almaceno los datos como CLOB y los datos (en mi caso, XML) contienen caracteres utf-8, solo se almacena un XML truncado.

Ejemplo de caracteres: diéresis alemana. La codificación de caracteres de la base de datos Informix está configurada en utf-8.

A continuación se encuentra mi archivo HBM:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
       "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.test.adapter.persistence.bean">
    <class name="MediaLayoutConfigPojo" table="medialayoutconfig">
        <id name="dbId" type="int" column="id">
            <generator class="native"></generator>
        </id>
        <property name="layoutxml" type="clob" column="layoutxml"></property> 
        <property name="name" type="string" column="name"></property>
        <property name="description" type="string" column="description"></property>
        <property name="layouttype" type="string" column="layouttype"></property><br>
    </class>
</hibernate-mapping>

La clase del controlador SQL es:

<property name="connection.driver_class">com.informix.jdbc.IfxDriver</property>
<property name="dialect">org.hibernate.dialect.InformixDialect</property>

Estoy utilizando el controlador JDBC ifxjdbc-3.50.JC9.jar (desafortunadamente, estoy atascado con él; actualizarlo puede causar roturas adicionales ya que se trata de una aplicación heredada).

La versión de Hibernate utilizada es: hibernate-core-3.6.3.Final.jar

Revisé este enlace https://hibernate.atlassian.net/browse/HHH-6127. No estoy seguro si estoy enfrentando el mismo problema en la clase del controlador.

Mi definición de tabla y los datos de ejemplo que estoy tratando de almacenar y lo que se almacena exactamente se muestran a continuación:

Aquí está mi definición de tabla:

Column name          Type                                    Nulls
----------------------------------------------------------------------
id                   serial                                  no
layouttype           varchar(32,0)                           no
name                 lvarchar(256)                           no
description          lvarchar(512)                           yes
layoutxml            clob                                    no

Estos son los datos que intento insertar en layoutxml CLOB:

<mediapropertieslayout><name>Система</name><description></description><header><entry><showinpopover></showinpopover><displayname>Система</displayname><mediaproperty>callVariable1</mediaproperty><uieditable>false</uieditable></entry></header><column></column><column></column><uri></uri></mediapropertieslayout>

Los datos reales almacenados en layoutxml (CLOB):

<mediapropertieslayout><name>Система</name><description></description><header><entry><showinpopover></showinpopover><displayname>Система</displayname><mediaproperty>callVariable1</mediaproperty><uieditable>false</uieditable></entry></header><column></column><column></column><uri>

Es decir, se truncan las etiquetas de cierre de uri y MediaPropertiesLayout. Esto variará según los caracteres UTF-8 que use. Si uso una cadena más larga en lugar de “Система”, la truncación será en un lugar diferente.

Cualquier indicación será de gran ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que está teniendo un problema al almacenar datos CLOB con caracteres UTF-8 en la base de datos de Informix. El tipo de dato varchar regular con caracteres UTF-8 se almacena sin ningún problema, pero al almacenar datos como CLOB y si los datos contienen caracteres UTF-8, solo se almacenan datos truncados.

    Usted ha mencionado su archivo hbm, el cual parece estar bien. El problema podría estar en el controlador JDBC o su configuración. Está usando el controlador JDBC ifxjdbc-3.50.JC9.jar, que es una versión antigua. Actualizarlo a una versión más reciente podría ayudar a resolver este problema.

    También ha mencionado la clase de controlador SQL y la versión de Hibernate que está utilizando. Se sugiere verificar si está enfrentando el mismo problema mencionado en el enlace https://hibernate.atlassian.net/browse/HHH-6127. Podría haber una solución disponible para este problema específico.

    Ha proporcionado la definición de tabla y los datos de muestra que está intentando almacenar. Parece que los datos reales almacenados en layoutxml (CLOB) están truncados. Esto podría deberse a algún problema de configuración con el controlador JDBC o la codificación de caracteres de la base de datos de Informix.

    Se sugiere verificar la configuración del controlador JDBC y los ajustes de codificación de caracteres de la base de datos de Informix. También puede intentar actualizar el controlador JDBC a una versión más reciente y ver si eso resuelve el problema.

    ¡Espero que esto ayude!

Comments are closed.