Error al listar bienes (SOLUCIONADO)

Hola, les comento un error que me esta tirando el sistema:

En estos días estubimos haciendo una carga de datos directamente desde la base de datos. Anda todo bien, no hubo problemas con los indices.
El problema surge al querer listar los bienes patrimoniales me tira el siguiente error:

SQLSTATE[22P05]: Untranslatable character: 7 ERROR: carácter 0xe2809d de codificación «UTF8» no tiene equivalente en «LATIN1»

busqué el código hexadecimal y representa las comillas dobles (").

Desde ya muchas gracias.

Tomás Marcote

Hola Tomás,

En general tenemos que recomendar mucho cuidado y control al realizar carga y/o edición de datos directamente en la DB ya que se saltean las reglas de negocio así como validaciones y conversiones que surgen del lado de la aplicación.

En este caso y como lo indicás, es un inconveniente con el encoding de los datos. En la base ingresó un caractér que no es posible representarlo en LATIN1. Esto puede ser por varios motivos, pero para que se entienda hay que saber que por defecto las DB PostgreSQL están en UTF8 y las aplicaciones SIU en LATIN1. Al momento de establecerse la conexión, la aplicación le dice a la DB que quiere trabajar con el encoding LATIN1 y el PostgreSQL se encarga de convertir entre uno y otro.

Un posible motivo de este error, es que hayan cargado datos a la DB provenientes de un MS Office (que por lo general trabaja en LATIN1). Si lo introducieron via pgAdmin, el cliente usa el mismo encoding que la base de datos por defecto. O si realizan la carga desde scripts, es probable que los datos estén en LATIN1. Posibles caminos para intentar solucionar el problema:

[ol]- cargar los datos via pgAdmin usando sentencias SQL y anteponer SET CLIENT_ENCODING TO ‘LATIN1’; y garantizar que los datos se tratan como LATIN1

  • convertir los datos a UTF8 y cargarlos normalmente
  • editar los datos (a mano o automatizar script mediante) ya cargados corrigiendo los caracteres incorrectos (a veces supone mas problemas)[/ol]

Lo idea sería poder rehacer el proceso de carga y volver a intentarlo nuevamente. Si especifican un poco más el proceso de carga quizás podamos ver algo extra que se me puede estar escapando de las manos…
Saludos!

Hola Sergio, gracias por tu respuesta.
Revisando registro por registro encontre que el error provenia del uso de otro tipo de comillas dobles. El sistema no tiene problemas para manejar " pero si cuando se presentan ” .
Gracias por aclararme las cuestiones de la codificación, cuando tenga que volver a importar otra tanda de datos voy a tener presente tu consejo sobre anteponer SET CLIENT_ENCODING TO ‘LATIN1’;

Muchisimas Gracias, Tomás Marcote.

Hola Tomás, que bueno!

Como comentario al margen, ciertamente lo tienen que definir siempre y cuando el origen de los datos sea LATIN1. Saludos!