[Pgsql-ayuda] Problema con funciones

Alvaro Herrera Munoz alvherre@dcc.uchile.cl
Fri, 20 Jun 2003 10:56:37 -0400


On Fri, Jun 20, 2003 at 08:05:11AM +0200, Antonio Castro wrote:
> On 19 Jun 2003, Manuel Sugawara wrote:
> 
> > usas iso-8859-5. Esto es lo bonito de unicode (utf-8 por ejemplo), que
> > la ? y los caracteres cir?licos, ?rabes, chinos etc pueden convivir
> > todos juntos, sin embargo algunos caracteres te van a tomar dos o tres
> > bytes mientras que en las codificaciones iso-8859-X todos los
> > caracteres toman un solo byte.
> 
> Me da la impresi?n que esto afecta al rendimiento de los indices
> sobre campos de tipo char(n).

Pura especulacion, o hiciste mediciones?

> Con el unicode creo que estos campos
> pasan a tener un almacenamiento con un n?mero variable de bytes.
> Sin unicode un char(4) ocupa cuatro bytes nada m?s. No digo que sea
> un problema grave, pero si lo veo como una desventaja.

Unicode no es la unica codificacion multibyte.

Si quieres usar una codificacion mono-byte pero poder usar "legalmente"
valores no ASCII (acentos, etc), usa una codificacion iso-8859-1 o
iso-8859-15.  Usar SQL_ASCII es buscarse problemas en general.

En todo caso, para Postgres los campos char(n), varchar(n) siempre tienen
un numero variable de bytes.  De hecho un char(4) usa un minimo de ocho
bytes (los cuatro primeros indican el largo en bytes de lo que viene).
Incluso char(1) usa minimo 5 bytes.

Por eso recomiendo usar "char" con las comillas para almacenar un solo
caracter.  Eso te limita a no usar cosas multibyte y no lleva los 4
bytes de largo al principio.

-- 
Alvaro Herrera (<alvherre[@]dcc.uchile.cl>)
"La conclusion que podemos sacar de esos estudios es que
no podemos sacar ninguna conclusion de ellos" (Tanenbaum)