Comunidad de diseño web y desarrollo en internet online

var o char?

Citar            
MensajeEscrito el 25 Mar 2008 12:09 am
para una tabla donde voy a almacenar datos como:

nombre
telefono
email
comentarios

que tipo de datos (varchar o char) y que motor de almacenamiento deberia usar? (MYSQL)

Por neohunter

Claber

563 de clabLevel

1 tutorial

 

Bogota, Colombia

opera
Citar            
MensajeEscrito el 25 Mar 2008 12:20 am
mmm si nadie contesta en 10 minutos contesto yo =)

Por neohunter

Claber

563 de clabLevel

1 tutorial

 

Bogota, Colombia

opera
Citar            
MensajeEscrito el 25 Mar 2008 12:58 am
Ok, vamos a analizar un poquito...

nuestos campos tendran texto asi que sean manejados como strings. Los dos campos básicos para contener caracteres alfanumericos son CHAR y VARCHAR.

Su propiedad esta en la cadena de texto máxima que pueden almacenar (definida entre 1 y 255 caracteres). La diferencia entre CHAR y VARCHAR radica en la manera en que manejan el espacio sin usar de una cadena de texto almacenada. Supongamoso que consideramos que la cadena más larga para el campo nombre es de 50 caracteres y tenemos un usuario que se llama manolo (6 caracteres). En un campo de tipo CHAR, el campo aún seguiría siendo de 50 caracteres (bytes) de tamaño y los últimos 44 caracteres serían espacios en blanco utilizados para rellenar la cadena a los 50 caracteres completos (los espacios sobrantes serán eliminados cuando recuperes el valor). Esto significa que no importa qué tan larga sea la cadena en realidad, siempre ocupará los 50 caracteres de espacio completos dentro de la tabla (ESPACIO DE ALMACNAMIENTO). VARHAR, por el contrario, almacenará sólo los 6 caracteres y ocupará solamente 7 bytes de espacio en la tabla (1 bytes para indicar la longitud de la columna mientras sea menos a 255).

Asi lo mas logico seria elegir VARCHAR y sacar provecho del menor espacio de almacenamiento requerido en la tabla con el objetivo de disminuir el espacio de almacenamiento. Cuando usas VARCHAR en una tabla (al igual que ciertas columnas creadas para grandes cantidades de texto y valores binarios) el ancho de cada fila se hace inconsistente. Una fila podría tener 50 bytes de longitud mientras que otra sólo 6. MySQL maneja esto almacenando la longitud de la fila (un byte adicional, como lo explique antes) en su sistema de archivos pero el servidor debe leer la longitud de cada fila antes de buscarla y continuar con la siguiente fila, donde deberá verificar la longitud otra vez y otra vez. Al definir campos de texto como CHAR ocuparemos más espacio en el disco rígido, asi es. pero habrá un aumento en la velocidad ya que el servidor sabrá que cada una de las filas tiene exactamente el mismo tamaño (por ejemplo 120 bytes), permitiéndole que busque entre las filas sin verificar su longitud primero. Por tal motivo, recomiendo que definas tus campos de texto como CHAR para mejorar la performance de las consultas, a menos que el espacio de almacenamiento sea una consideración importante (y con los precios de los discos de hoy en día esta no es una gran preocupación).

sin embargo, oracle por ejemplo recomienda usar varchar porque su motor esta optimizado para este tipo de dato, db2 de ibm en cambio recomienda usar char.

Por neohunter

Claber

563 de clabLevel

1 tutorial

 

Bogota, Colombia

opera
Citar            
MensajeEscrito el 25 Mar 2008 01:58 am
¿por que no simplemente creas un tip?


por cierto yo usaría varchar en casi todas las tablas(incluyendo fono) menos en comentarios que es un texto mas largo

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 25 Mar 2008 02:04 am
porque usarias varchar y no char?

Por neohunter

Claber

563 de clabLevel

1 tutorial

 

Bogota, Colombia

opera
Citar            
MensajeEscrito el 25 Mar 2008 02:09 am

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 25 Mar 2008 02:54 am
Geez!

Char tiene su ventajas sobre varchar.... Sabes por que existe tambien zerofill ? porque tambien tiene razón de ser y es util, pero no quiere decir que un numero sin zerofill sea inutil pues la mayorias de los veces lo son. Y no precisamente uno es más malo que otro por el espacio que usa, simplemente su utilidad es otra.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 25 Mar 2008 03:16 pm
¿cuales serian las ventajas y desventajas?

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 25 Mar 2008 09:02 pm
por dios inyaka lo escribi en el post.


Asi lo mas logico seria elegir VARCHAR y sacar provecho del menor espacio de almacenamiento requerido en la tabla con el objetivo de disminuir el espacio de almacenamiento. Cuando usas VARCHAR en una tabla (al igual que ciertas columnas creadas para grandes cantidades de texto y valores binarios) el ancho de cada fila se hace inconsistente. Una fila podría tener 50 bytes de longitud mientras que otra sólo 6. MySQL maneja esto almacenando la longitud de la fila (un byte adicional, como lo explique antes) en su sistema de archivos pero el servidor debe leer la longitud de cada fila antes de buscarla y continuar con la siguiente fila, donde deberá verificar la longitud otra vez y otra vez. Al definir campos de texto como CHAR ocuparemos más espacio en el disco rígido, asi es. pero habrá un aumento en la velocidad ya que el servidor sabrá que cada una de las filas tiene exactamente el mismo tamaño (por ejemplo 120 bytes), permitiéndole que busque entre las filas sin verificar su longitud primero. Por tal motivo, recomiendo que definas tus campos de texto como CHAR para mejorar la performance de las consultas, a menos que el espacio de almacenamiento sea una consideración importante (y con los precios de los discos de hoy en día esta no es una gran preocupación).

Por neohunter

Claber

563 de clabLevel

1 tutorial

 

Bogota, Colombia

opera
Citar            
MensajeEscrito el 26 Mar 2008 01:57 am
Mi opinión. Varchar se usa para registros de mas de 5 caracteres, para no desperdiciar espacio en disco. La teoría de neohunter me parece razonable, mas sin embargo no estoy del todo deacuerdo con él. Me parece lógico lo que planteas neo, pero no creo(igual yo me estoy equivocando) que sea necesario que mysql busque el tamaño del row, en una búsqueda usa los índices, los cuales ya estan listos para eso, ya una vez con la información filtrada, al seleccionar los campos, si realiza el proceso que comentas.

Al menos yo, cuando el campo tenga máximo 5 chars, utilizo CHAR, cuando son mas utilizo VARCHAR.


Si puedes hacer un laboratorio con tablas de 100,000 registros y comparando el rendimiento usando CHAR VS VARCHAR, podriamos ver que tanto sirve eso que comentas.


Saludos

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 26 Mar 2008 03:51 pm
Debes usar varchar cuando que almacenaras en el campo son de tamaño variable (o creian que varchar es porque la palabra es c00l); char cuando las cadenas son de tamaño fijo ejemplo: codigos, bandera, cualquier cosa que deba tener un tamaño especifico. No es del todo cierto que varchar siempre usa menos bytes que el char, pues hay veces que no sucede eso.

VARCHAR (1) <-- 2 bytes
CHAR(1) <--- 1 byte

Varchar siempre almancena un byte adicional.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 26 Mar 2008 04:09 pm

Código :

VARCHAR (1) <-- 2 bytes 


Es que como best practice, no se recomienda usar un varchar de menos de 5 caracteres(sea de tamaño variable o no). Ya después de 5 si aplica, usar uno u otro dependiendo el caso. Técnicamente es posible usar un varchar(1), pero no es para nada recomendable(tanto por espacio en disco, como por rendimiento).

Por Dano

BOFH

4273 de clabLevel

14 tutoriales
4 articulos
10 ejemplos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Lugar estratégico para vigilarte

firefox
Citar            
MensajeEscrito el 26 Mar 2008 04:20 pm
Pero eso no quiere decir tampoco que un varchar de 50 caracteres sea mejor que un char de 50 caracteres..

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 29 Mar 2008 02:50 am
me agrada la polemica, la verdad es que siempre he visto diferentes puntos de vista y me inquieta mucho este tema, no soy un experto en DB pero si me gustaria saber la verdad.

Me recuerda un articulo muy interesante...

http://spanish.joelonsoftware.com/Articles/BacktoBasics.html

Por neohunter

Claber

563 de clabLevel

1 tutorial

 

Bogota, Colombia

opera
Citar            
MensajeEscrito el 31 Mar 2008 04:32 pm

Maikel escribió:

Debes usar varchar cuando que almacenaras en el campo son de tamaño variable; char cuando las cadenas son de tamaño fijo ejemplo: codigos, bandera, cualquier cosa que deba tener un tamaño especifico.

Esto tiene mucho sentido, gracias por la explicación.

Por NEO_JP

BOFH

5724 de clabLevel

13 tutoriales
12 articulos

Genero:Masculino   Anime Bloggers Premio_Secretos Team Cristalab

Front-end Developer en Washington, DC

firefox
Citar            
MensajeEscrito el 01 Abr 2008 05:24 pm
Alguna opinion sobre la velocidad de busqueda en campos char o varchar? en teoria deberia ser mas rapido char. Yo sigo pensando que se deberia usar CHAR aun cuando la longitud de datos sean diferentes.

Por neohunter

Claber

563 de clabLevel

1 tutorial

 

Bogota, Colombia

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.