Postgres Encoding

Alvaro Herrera alvherre en dcc.uchile.cl
Vie Mayo 7 14:16:05 CLT 2004


On Fri, May 07, 2004 at 11:59:31AM -0400, OLIVAREZ COTAL JOSE LUIS wrote:

> Perdon por lo escueto lo que sucede es que tengo problemas en la
> insercion de caracteres latinos eñes acentos etc.

Si es SQL_ASCII, puedes ingresar todos los caracteres que quieras; lo
que tienes que tener claro es que el servidor no hara conversion de
juego de caracteres de ninguna clase en ningun momento.  Entonces si
ingresas datos por ej. en Latin-1 (iso-8859-1), vas a tener problemas
cuando uses JDBC porque el quiere los datos en utf-8, y la conversion no
se va a hacer correctamente.

En cambio si declaras que el juego de caracteres es latin-1, se puede
hacer sin problemas la recodificacion internamente, y tu ni te mueves
de tu escritorio.

> bueno esto se puede solucionar al crear la base de datos con la opcion
> createdb -E LATIN1 mibase, pero cuado la base esta creada como cambio
> el  SQL_ASCII a LATIN1, lei algunas cosas por hay que dicen que hay
> que entregarle los parametros al initdb en el init de postgres pero no
> he tenido cambios.  me imagino que debe haber una tabla pg_.... a la
> cual le puede hacer un update gracias.

No, lamentablemente no puedes cambiar el encoding ni el locale
(lc_collate particularmente) de una base de datos en funcionamiento.
El encoding puedes cambiarlo al momento de la creacion de la base de
datos (createdb); el locale puedes cambiarlo solo al momento de initdb.

Un detalle que no esta documentado es que cada locale funciona
correctamente solo con el encoding que le corresponde.  Si usas es_ES o
es_CL, solo puedes usar latin1!  Si quieres usar utf-8 creo que tendrias
que usa es_ES.utf8 o es_CL.utf8.

Esta es una limitacion de Pg conocida que se espera solucionar en algun
futuro ojala no demasiado lejano, pero te recomiendo que no te sientes a
esperar porque puede tardar (basicamente hay que implementar todo el
sistema de locale dentro de la BD, porque la API de libc no permite
hacer todo lo que se necesita).

Ojala haya quedado claro.

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"No es bueno caminar con un hombre muerto"


Más información sobre la lista de distribución Linux