2011-12-12 26 views
18

Tengo aproximadamente 2k de datos binarios en bruto que necesito almacenar en una tabla, pero no sé si elegir el tipo Varbinary o Blob. He leído las descripciones en los documentos de MySQL pero no encontré ningún contrato y comparo las descripciones. También leí que varbinary solo admite hasta 255 caracteres, pero creé exitosamente un campo varbinary (2048), así que estoy un poco confundido.Varbinary vs Blob en MySQL

No es necesario indexar los datos binarios ni tendré que consultarlos. ¿Existe una ventaja al usar un tipo sobre el otro de PHP?

Gracias!

+0

Esta podría ser la razón por la que obtengo 'org.hibernate.HibernateException: Tipo de columna incorrecta en ... para la columna .... Encontrado: blob, expected: longblob' –

Respuesta

11

VARBINARY está limitado a 255 bytes en MySQL 5.0.2 y abajo, a 65kB en 5.0.3 y superior.

BLOB está limitado a 65kB.

En última instancia, VARBINARY es prácticamente lo mismo que BLOB (desde la perspectiva de lo que se puede almacenar en ella), a menos que desee conservar la compatibilidad con versiones "antiguas" de MySQL. El MySQL Documentation dice:

En la mayoría de los aspectos, se puede considerar una columna como columna BLOBVARBINARY que puede ser tan grande como desee.

+0

Re" varbinary es prácticamente lo mismo que blob "... por favor cita una fuente. – Pacerier

+0

@Pacerier: respuesta editada para incluir un enlace a la página de documentación de MySQL (sic) que hace alusión a este hecho. – Romain

+0

Pero como se muestra en la otra publicación a continuación, en realidad son en realidad cosas muy diferentes en conjunto. – Pacerier

12

realidad blob puede ser más grande (hay TINYBLOB, gota, MEDIUMBLOB & LONGBLOB http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html) con hasta 2^32 -1 sobre el límite de tamaño.

También el almacenamiento de blob crece "fuera" de la fila, mientras que el tamaño varbinary máximo está vinculado por la cantidad de tamaño de fila libre disponible (por lo que en realidad puede ser inferior a 64 Kb).

Hay algunas diferencias menores entre ambos 1) con secuencias de comandos (Índice de burbuja necesita un tamaño de prefijo en los índices, varbinary no lo hace) http: /en/column-indexes.html
CREATE TABLE test (BLOB blob_col , INDICE (blob_col (10)));

2) Como ya se ha mencionado, hay problemas de espacio trailling gestionados de forma diferente entre varbinary & burbuja de MySQL 5.0.x o versiones anteriores: http: ///en/blob.html http: /// es/binary- varbinary.html

(truncando los enlaces, ya que stackoverflow piensa demasiados enlaces son spam)

+1

Entonces, cuando tenemos solo una columna de 2KB ¿es más beneficioso usar blob (fuera de hilera) o varbinary (en hilera)? – Pacerier

9

Una diferencia significativa se se almacenan tipos blob en almacenamiento secundario, mientras que varbinaries se almacenan en línea en la fila de la misma manera como se varchar y otros tipos "simples".

Esto puede tener un impacto en el rendimiento en un sistema ocupado, donde la búsqueda adicional para recuperar y manipular los datos de blob puede ser costosa.

+0

¿Esto es cierto para 5.0.3 y superiores? – Pacerier

0

Solo estoy viendo una aplicación de prueba que almacena alrededor de 5k datos binarios en una columna. Inicialmente usaba varbinary pero como es tan lento, decidí probar blob. Bueno, estoy mirando la velocidad de escritura del disco con la parte superior y no veo ninguna diferencia.

La única diferencia importante que leo en el manual de mysql es que el motor de memoria no admite blobs, por lo que cualquier tabla temporal que cree con consultas (vea cuando mysql uses temp tables) se creará en el disco y será mucho más lenta. Así que es mejor apostar por varbinary/binary si es lo suficientemente corto como para caber en una fila (en este momento 64k total para todas las columnas).

5

Vale la pena señalar que el motor de almacenamiento de memoria no es compatible con BLOB/TEXT, pero funciona con VARBINARY.