Re: [Pgsql-ayuda] Consulta sobre velocidad

From: Antonio Castro <acastro(at)ciberdroide(dot)com>
To: Alvaro Herrera <alvherre(at)dcc(dot)uchile(dot)cl>
Cc: José Luis DALLAPICCOLA <jld(at)rnonline(dot)com(dot)ar>, pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx
Subject: Re: [Pgsql-ayuda] Consulta sobre velocidad
Date: 2003-02-02 08:26:55
Message-ID: Pine.LNX.4.21.0302020907090.12710-100000@midas.ciberdroide.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On Sat, 1 Feb 2003, Alvaro Herrera wrote:

> On Sat, Feb 01, 2003 at 08:57:56PM +0100, Antonio Castro wrote:
> > On Sat, 1 Feb 2003, Alvaro Herrera wrote:
> >
> > > restantes son los bytes mismos. Nota que el largo en bytes es distinto
> > > del largo en caracteres (piensa en multibyte, que ahora viene activado
> > > por defecto)
> >
> > Aquí me hablas de algo que desconozco. He comprobado que char(1) y
> > varchar(1) ocupán lo mismo haciendo dos pruebas distintas en un par de
> > tablas y comparandolas. Eso es lo que tu decías. Lo que me pregunto
> > ahora es si char(n) siempre ocupa n+4 bytes o si eso depende de la
> > configuración de la base de datos. Para varchar(n) me parece lógico
> > que siempre sea así para char(n) no.
>
> La diferencia de almacenamiento va a ser por ejemplo cuando tengas
> varchar(20) y char(20) y almacenes un string de 10 letras. Varchar va a
> guardar las diez letras, mientras que char va a guardar las diez letras
> y además diez espacios para completar.

Si eso lo había entendido pero si te das cuenta habría no existe
ningún criterio para usar char(n) en lugar de varchar(n) ya que
varchar(n) resultará con multibyte siempre mejor o igual que char(n).

> Multibyte es un sistema para almacenar caracteres en lenguas que tienen
> muchos caracteres distintos (japonés, chino, etc). Cada carácter puede
> ocupar más de un byte.

Supongo que con una codificación multibyte no se predecir la ocupación de
un string porque unos caracteres ocuparan un byte mientras que otros ocuparan
dos. Pero volvemos a lo mismo char(n) ocupará n+4 bytes si está codificado
con multibyte pero estoy casi seguro de que ocupará n bytes en caso contrario.
El manual desde mi punto de vista ofrece una información inexacta por ser
incompleta. Lo peor de todo es que esto puede tener una repercusión muy
fuerte en caso de necesitar usar claves alfanuméricas tipo referencias de
artículos, matriculas de coches o cosas así.

Es como si el multibyte dejara sin sentido a char(n) que se mantiene por
compatibilidad. El verdadero sentido de usar char(n) es el que yo dije
que es el que me explicaron cuando estudie oracle hace un montón de años.

> Disculpa que sea demasiado breve, pero estoy sólo de paso y mi tiempo es
> limitado.

Bueno no es necesario que me aclares nada, me hago una idea aproximada pero
suficiente para indagar por mi cuenta el resto. Muchas gracias.

Un saludo

Antonio Castro

+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/\ /\ Ciberdroide Informática (Tienda de Linux)
\\W// <<< http://www.ciberdroide.com >>>
_|0 0|_
+-oOOO--(___o___)--OOOo----------------------------------------------------+
| . . . . U U . . . . Antonio Castro Snurmacher acastro(at)ciberdroide(dot)com |
| . . . . . . . . . . |
+()()()----------()()()----------------------------------------------------+
| *** 1.700 sitios clasificados por temas sobre Linux en ***Donde_Linux*** |
| <<< http://www.ciberdroide.com/misc/donde/dondelinux.html >>> |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2003-02-02 19:10:42 Re: [Pgsql-ayuda] Utilizar mayuscular
Previous Message Alvaro Herrera 2003-02-01 20:02:01 Re: [Pgsql-ayuda] Consulta sobre velocidad