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!
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 colonneVARBINARY
qui peut être aussi grande que vous le souhaitez.
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.
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.
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).