From: | Felipe Montecino <ksha(at)mitm(dot)cl> |
---|---|
To: | "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com> |
Cc: | Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>, pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] duda sobre codificación |
Date: | 2013-04-23 13:20:48 |
Message-ID: | CAO--v27O1k8WPt1FXotkYm2SR4stAo_qO7Gd3NK0T=e0nVYzaA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Guillermo,
intenta seguir los siguientes pasos
http://www.postgresql.org/message-id/6.1.2.0.2.20041108105839.02fdcfe0@pop.suscom-maine.net(Ingles)
El 19 de abril de 2013 17:50, Guillermo E. Villanueva <
guillermovil(at)gmail(dot)com> escribió:
> 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
>>
>
>
--
--
Correo no firmado o cifrado
From | Date | Subject | |
---|---|---|---|
Next Message | Jaime Casanova | 2013-04-23 18:01:08 | Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] función con RETURNS SETOF integer |
Previous Message | Felipe Montecino | 2013-04-23 13:16:47 | Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Aviso automático de conexión caida. |