Re: [pgsql-es-ayuda] duda sobre codificación

From: "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
Cc: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] duda sobre codificación
Date: 2013-04-19 20:50:35
Message-ID: CANm+PCA537WH6SRtWqEPgu-gBcFrurpCL0O_xCRdwPT9Y3FCKw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Muchas gracias Alvaro, que despiole!!!!
voy a tener que hacer algo así.
Saludos

Guillermo Villanueva

El 19 de abril de 2013 16:16, Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>escribió:

> Guillermo E. Villanueva escribió:
> > Amigos, heredé una base de datos que está codificada en LATIN1
> > Intenté hacer backup de algunas tablas para llevarlas de un server a
> otro.
> > En ambos casos está en LATIN1
> > Al backup lo hice generando INSERTs
> > El mismo backup ya me genera el archivo con seteos preliminares como :
> > SET client_encoding = 'LATIN1';
> > Y la sorpresa viene cuando ejecuto los inserts (lo hago desde pgAdmin)
> > guarda mal los caracteres especiales como ñ á é etc
> > en cambio si modifico el seteo pasándolo a :
> > SET client_encoding = 'UTF8';
> > Todo se guarda ok
> >
> > Porqueeee si la base está en LATIN1 y el cliente estaba en LATIN1, no se
> > suponía que debía guardar bien así?
> > Desde ya les agradezco si me pueden aclarar un poquito el panorama
>
> Seguramente lo que sucede es que los datos realmente no están en Latin1
> porque las aplicaciones han estado hablando en UTF8 todo el tiempo. Si
> hubieras declarado client_encoding=utf8 el sistema habría hecho
> conversión de los bytes que llegaban de la aplicación y los habría
> ingresado en Latin1. Pero no lo hiciste; y Latin1 no tiene mecanismo de
> auto-verificación, de manera que los bytes que recibe son los que
> inserta, sin posibilidad de verificar que "tienen sentido".
>
> UTF8 es distinto no sólo porque los caracteres se representan diferente,
> sino también tiene más redundancia en la representación de los
> caracteres, de manera que si tratas de insertar datos que en realidad
> están en Latin1 (por ejemplo), puede darse cuenta que a la secuencia le
> faltan bytes y rechaza la cadena como no válida.
>
>
> Tu solución es tratar de importar los datos en UTF8 y verificar que todo
> está correcto. Si hay algo que falla la inserción, considera esos datos
> restantes como si estuvieran en Latin1 (client_encoding=latin1). Luego
> de eso deberías tener todos los datos con la codificación correcta.
> A mí me tocó enfrentar este mismo problema, donde había una mezcla de
> UTF8 válido (99% de los datos) y Latin1. Lo que hice fue pasar todo por
> pgloader en dos pasadas; la primera asumía encoding utf8. El 1% fue
> rechazado y agregado a un archivo de fallas; la segunda pasada importaba
> el archivo de fallas considerando latin1.
>
> --
> Álvaro Herrera http://www.2ndQuadrant.com/
> PostgreSQL Development, 24x7 Support, Training & Services
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Guillermo E. Villanueva 2013-04-19 21:00:41 función con RETURNS SETOF integer
Previous Message Alvaro Herrera 2013-04-19 19:16:31 Re: duda sobre codificación