web-dev-qa-db-fra.com

Varbinary vs Blob dans MySQL

J'ai environ 2k de données binaires brutes que je dois stocker dans une table, mais je ne sais pas si je dois choisir le type Varbinary ou Blob. J'ai lu les descriptions dans les documents MySQL mais je n'ai trouvé aucun contrat et comparé les descriptions. J'ai également lu que varbinary ne prend en charge que 255 caractères, mais j'ai réussi à créer un champ varbinary (2048), donc je suis un peu confus.

Les données binaires n'ont pas besoin d'être indexées et je n'aurai pas besoin de les interroger. Y a-t-il un avantage à utiliser un type par rapport à l'autre à partir de PHP?

Merci!

25
Jimmyb

VARBINARY est lié à 255 octets sur MySQL 5.0.2 et inférieur, à 65 Ko sur 5.0.3 et supérieur.

BLOB est lié à 65 Ko.

En fin de compte, VARBINARY est pratiquement identique à BLOB (du point de vue de ce qui peut y être stocké), à moins que vous ne vouliez préserver la compatibilité avec les "anciennes" versions de MySQL. MySQL Documentation dit:

À bien des égards, vous pouvez considérer une colonne BLOB comme une colonne VARBINARY qui peut être aussi grande que vous le souhaitez.

19
Romain

En fait, le blob peut être plus grand (il y a tinyblob, blob, mediumblob & longblob http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html ) avec jusqu'à 2 ^ 32 -1 sur la taille limite.

De plus, le stockage d'objets blob se développe "à l'extérieur" de la ligne, tandis que la taille varbinaire maximale est liée à la quantité de taille de ligne disponible disponible (elle peut donc être réellement inférieure à 64 Ko).

Il y a quelques différences mineures entre les deux

1) Avec les scripts d'index (le blob a besoin d'une taille de préfixe sur les index, varbinary non) http: /en/column-indexes.html
Test CREATE TABLE (blob_col BLOB, INDEX (blob_col (10)));

2) Comme déjà mentionné, il existe des problèmes d'espace traînant gérés différemment entre varbinary et blob sur MySql 5.0.x ou les versions antérieures: http: ///en/blob.html http: ///en/binary-varbinary.html

(tronquer les liens, puisque stackoverflow pense que trop de liens sont du spam)

Une différence significative est que les types d'objets blob sont stockés dans le stockage secondaire, tandis que les varbinaries sont stockés en ligne dans la ligne de la même manière que les varchars et autres types "simples".

Cela peut avoir un impact sur les performances dans un système occupé, où la recherche supplémentaire pour extraire et manipuler les données d'objets blob peut être coûteuse.

11
Foobarista

Il convient de souligner que le moteur de stockage de la mémoire ne prend pas en charge BLOB/TEXT mais qu'il fonctionne avec VARBINARY.

5
matt

Je regarde juste une application de test qui stocke environ 5k données binaires dans une colonne. Il utilisait initialement varbinary mais comme il est si lent, j'ai décidé d'essayer blob. Eh bien, je regarde la vitesse d'écriture du disque au sommet et je ne vois aucune différence.

La seule différence significative que j'ai lue dans le manuel mysql est que les blobs ne sont pas pris en charge par le moteur de mémoire, donc toutes les tables temporaires que vous créez avec des requêtes (voir quand mysql utilise des tables temporaires ) seront créées sur le disque et c'est beaucoup plus lent. Donc, vous feriez mieux de parier sur varbinary/binary s'il est assez court pour tenir dans une ligne (pour le moment 64k au total pour toutes les colonnes).

0
akostadinov