Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] BLOB V.s Varchar

Estas en el tema de BLOB V.s Varchar en el foro de Mysql en Foros del Web. Estoy haciendo una base de datos y tengo que guardar la imagen de un usuario que es dada por la API de twitter. A la ...
  #1 (permalink)  
Antiguo 04/09/2013, 03:01
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
BLOB V.s Varchar

Estoy haciendo una base de datos y tengo que guardar la imagen de un usuario que es dada por la API de twitter.

A la hora de crear el campo en la tabla quisiera saber si es mejor hacerlo en tipo BLOB o tipo varchar para que solo guarde el enlace hacia una carpeta donde esten guardadas las imagenes.

He leido sobre BLOB y no parece muy factible debido a su limitada capacidad de 65534 bytes.

saludos.
__________________
Ayúdame a hacerlo por mi mismo.
  #2 (permalink)  
Antiguo 04/09/2013, 03:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: BLOB V.s Varchar

Pur un lado, usa VARCHAR yguarda la ruta.
Por otro lado, si quieres ver los tipos de columna, mira en el manual de referencia. llí verás cuál es el que te conviene: http://dev.mysql.com/doc/refman/5.0/...umn-types.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 04/09/2013, 04:34
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: BLOB V.s Varchar

Muchas gracias por tu pronta respuesta gnzsoloyo.

En el manual veo que dice

Cita:
[NATIONAL] VARCHAR(M) [BINARY]
Cadena de caracteres de longitud variable. M representa la longitud de columna máxima. En MySQL 5.0, el rango de M es de 0 a 255 antes de MySQL 5.0.3, y de 0 a 65,535 en MySQL 5.0.3 y posterior. (La longitud máxima real de un VARCHAR en MySQL 5.0 se determina por el tamaño de registro máximo y el conjunto de caracteres que use. La longitud máxima efectiva desde MySQL 5.0.3 es de 65,532 bytes.)

Yo uso la versión 5.1.69 de MYSQL.

Luego dice

Cita:
BLOB[(M)]

Una columna BLOB con longitud máxima de 65,535 (2^16 - 1) bytes.

Una longitud opcional M puede darse para este tipo en MySQL 5.0. Si se hace, MySQL creará las columnas como el tipo BLOB de tamaño mínimo para tratar los valores de M bytes.
Entonces veo que me equivoqué al leer el manual.

A partir de 5.0.3, las columnas Varchar y BLOB tienen la misma longitud.

Entonces voy a preguntar algo que es obvio pero no pregunté

¿Cuales son las diferencias?
¿Por qué me recomiendas utilizar varchar?

Es que veo las diferencias en el manual, pero no se qué significan :S

Cita:
Las ordenaciones y comparaciones de las columnas de tipo carácter se basan en el conjunto de caracteres asignado a la columna. Para versiones anteriores, la comparación y ordenación se basan en la colación del conjunto de caracteres del servidor. Para columnas CHAR y VARCHAR, puede declarar que la columna con el atributo BINARY realice la ordenación y la comparación usando los códigos de los valores subyacentes en lugar del orden léxico.
También que

Cita:
Desde MySQL 5.0.3, VARCHAR se guarda con un prefijo de longitud de uno o dos bytes + datos. La longitud del prefijo es de dos bytes si la columna VARCHAR se declara con una longitud mayor a 255.
Disculpa si importuno con las preguntas, pero como siempre, lo hago para aprender todos los detalles posibles.
__________________
Ayúdame a hacerlo por mi mismo.
  #4 (permalink)  
Antiguo 04/09/2013, 05:33
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: BLOB V.s Varchar

Mi sugerencia de que uses VARCHAR apunta a que guardes la ruta relativa del archivo, y no la imagen en la tabla. Es lo más habitual, y tiene al menos tres motivos prácticos.
1) Guardar la imagen aumenta las necesidades de trafico de la base de datos, y es muy común que los servicios de hosting te pongan un techo de datos transferidos (en bytes) desde la base a cualquier aplicación. Esta cuota de transferencia es independiente de la cuota de tráfico de web, por lo que que tengas tráfico ilimitado de navegacion en el sitio, no implica que tengas ilimitado trafico de datos en base.
2) Tienen un mal impacto en los backups, ya que los datos binarios no se comprimen al momento de realizarlos, y por tanto terminan redundando en problemas de timeout de ejecución o de transferencia al hacer uno.
3) Requieren rutinas o proceso posterior de lo obtenido para reconvertir ese stream binario en una imagen. Esto no ocurre en el caso de guardar la ruta, porque los recursos para mostrar la imagen cuya ruta se obtiene en base, son mucho más sencillos.
Hay otras razones posibles, pero no vienen al caso.
En definitiva, es muy habitual que este tema se resuelva como te comento. Incluso Microsoft, IBM u Oracle, en sus sites, no almacenan imágenes o documetnos PDF en las tablas, sino en carpetas.
Por otro lado, ten en cuenta que a nivel de seguridad, el acceso a carpetas del site también puede ser restringido y filtrado con mejores recursos, mientras que la foto dentro de la base podría ser afectada por sql-injection (si esta no se controla bien), o bien impactada por errores en el manejo de datos. Un borrado "accidental" de una tabla, destruye completamente lo almacenado en ella, mientras que borrar un archivo, es todavía recuperable.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 04/09/2013, 09:34
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años
Puntos: 84
Respuesta: BLOB V.s Varchar

Sublime explicación. Da gusto, muchísimas gracias!!
__________________
Ayúdame a hacerlo por mi mismo.

Etiquetas: blob, campo, tabla, varchar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:23.