Re: latin1 y

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: rafael bonifaz <rafael(dot)bonifaz(at)gmail(dot)com>
Cc: Luis Rodrigo Gallardo Cruz <rodrigo(at)nul-unu(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: latin1 y
Date: 2008-02-09 22:35:39
Message-ID: 20080209223539.GC13866@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

rafael bonifaz escribió:

> Luis Rodrigo dijo:
>
> > Lo que necesitas es que el servidor y el cliente (en este caso PHP)
> > estén de acuerdo en la codificación a usar para comunicarse. La
> > forma de hacer esto es que el cliente le avise al servidor, usando
> > un
> >
> > set client_encoding = 'latin1';
> >
> > al conectar, antes de cualquier otra comunicación.
>
> Quieres decir que con esto podría tener la base de datos en UTF8 y los
> scripts en cualquier charset si defino el encoding del cliente como
> utf8. Me gusta bastante esta solución.

Puedes tener la base de datos en *cualquier* codificacion, y el cliente
en cualquier otra codificacion distinta(*). Si declaras correctamente el
client_encoding al principio de la sesion, el servidor se encarga de
hacer las conversiones que sean necesarias.

Pero ojo, lo que tienes que hacer es declarar el client_encoding al
encoding (charset) del cliente. Si los scripts son Latin1 entonces debe
ser latin1. Observa tambien que lo que importa es que los *datos* que
se envian vengan en esa codificacion: por ejemplo si el servidor web
entrega datos en UTF8, entonces independiente de la codificacion de los
scripts, tienes que considerar que los datos que vienen de ahi son UTF8.
Si quieres puedes convertir los datos desde la codificacion del servidor
web (que podria ser UTF8 o cualquier otra cosa) a Latin1 y declarar
client_encoding=latin1.

Lo bueno que tiene UTF8 es que aplica ciertos chequeos a los datos. En
latin1 no hay forma de distinguir una cadena de bytes valida de una que
no es valida. En UTF8 si se puede, y por lo tanto tienes mayor
seguridad que los datos que estas almacenando estan realmente en esa
codificacion. Si usas Latin1, es posible que te equivoques al hacer las
conversiones y no habra forma de darse cuenta hasta que un incauto
trate de ver los datos y encuentre todo mal.

(*) Obviamente las codificaciones tienen que ser compatibles: por
ejemplo no funcionaría tener la base de datos en Latin1 y el servidor en
Latin2, porque no hay manera de hacer conversion entre una y otra.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Sebastián Villalba 2008-02-09 23:24:54 Re: Replicacion y alta disponibilidad
Previous Message Luis Rodrigo Gallardo Cruz 2008-02-09 21:59:08 Re: latin1 y