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

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

In response to

Browse pgsql-es-ayuda by date

  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.