Re: Lectura corrupta de datos

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Efren Alejandro Barroso <efrenbarroso(at)hotmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Lectura corrupta de datos
Date: 2005-08-12 02:32:02
Message-ID: 20050812023202.GB9504@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Fri, Aug 12, 2005 at 12:28:31AM +0000, Efren Alejandro Barroso wrote:
> Buenas tardes,
>
> Estoy empezando con postgreSQL y les escribo para consultarles lo
> siguiente :

> [problema con codificacion]

Hola,

El problema es que la codificacion SQL_ASCII en realidad no asegura nada
sobre la codificacion de los datos -- los bytes que entran, salen.

Esto puede parecer correcto, pero no es asi. El problema aparece cuando
tienes una aplicacion que inserta datos usando, digamos, Latin-1, y otra
aplicacion que los lee usando, por ejemplo, UTF-8.

Cuando eso sucede, los bytes que escribes se van a interpretar de manera
distinta al leerlos.

Para solucionar este problema tienes que hacer dos cosas:

1. definir una codificacion en el servidor (server_encoding) al momento
de hacer initdb. Observa que no puedes cambiar la codificacion en un
instante posterior; si bien se supone que se puede escoger al momento de
CREATE DATABASE, en la practica estas limitado a la codificacion del
locale que escoges al hacer initdb. Por lo tanto en realidad escoges la
codificacion en initdb. Ahora bien, esta codificacion puede ser
cualquiera salvo SQL_ASCII, pero como te digo depende del locale. En la
practica puede ser Latin-1, Latin-9 o UTF-8.

2. Definir client_encoding correctamente en cada aplicacion.

Por lo tanto lo que tienes que hacer en realidad es un dump de tus
datos, luego asegurarte que estan en alguna codificacion coherente (por
ej. que no hay mitad de datos en Latin-1 y otra mitad en UTF-8), luego
crear una BD con una codificacion como dije en el paso 1, luego
restaurar los datos (definiendo client_encoding al momento de hacerlo,
para que se haga reconversion de datos de ser necesario), y finalmente
usando cualquier aplicacion los datos saldran en la forma correcta.

Espero haberme explicado. Este tema en realidad es muy simple, pero es
como las matematicas: si no has tenido el "ding" no lo comprendes.

--
Alvaro Herrera (<alvherre[a]alvh.no-ip.org>)
Y dijo Dios: "Que sea Satanás, para que la gente no me culpe de todo a mí."
"Y que hayan abogados, para que la gente no culpe de todo a Satanás"

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Julio Rivero 2005-08-12 03:35:31 Re: A toda la "Comunidad en Español de PostgreSQL"
Previous Message Diego Gil 2005-08-12 02:21:55 Re: A toda la "Comunidad en Español de PostgreSQL"