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.
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!