Un BLOB
est un binary long object
, c'est à dire un objet binaire long, qui peut contenir une certaine quantité d'information. Les quatre types TINYBLOB
, BLOB
, MEDIUMBLOB
et LONGBLOB
ne diffèrent que par leur taille maximum. Voir 7.2.1 Tailles nécessaires pour le stockage de types de colonnes.
Les quatre types TINYTEXT
, TEXT
, MEDIUMTEXT
t LONGTEXT
correspondent aux quatre types BLOB
et ont les mêmes tailles maximum, et les mêmes conditions de stockage. La seule différence entre les types BLOB
et TEXT
tient aux tris et aux comparaisons : les tris et comparaisons tiennent compte de la casse, dans le cas des TEXT
, et n'en tiennent pas compte, dans le cas des BLOB
. En d'autres termes, un TEXT
est un BLOB
insensible à la casse.
Lors de l'affectation d'une valeur de type BLOB
ou TEXT
dans une colonne trop petite, la valeur est tronquée à la taille de la colonne.
En général, on peut considérer qu'une colonne de type TEXT
est une colonne de type VARCHAR
, aussi grande que désiré. De la même manière, on peut considérer qu'une colonne de type BLOB
est une colonne de type VARCHAR BINARY
, aussi grande que possible. Les différences sont :
- Il est possible d'indexer les variables de type
BLOB
et TEXT
pour les version de MySQL 3.23.2 ou plus récentes. Les anciennes versions ne le supporte pas.
- Les espaces situés en début de chaîne ne sont pas effacés lors de l'enregistrement dans un
BLOB
t TEXT
, contrairement aux colonnes de type VARCHAR
.
BLOB
and TEXT
columns cannot have DEFAULT
values.
- Les valeurs de type
BLOB
t TEXT
n'ont pas d'option DEFAULT
.
MyODBC utilise le type LONGVARBINARY
pour le type BLOB
et LONGVARBINARY
pour TEXT
.
Parce que les types peuvent être extrêmement grands, il y a certaines contraintes à leur utilisation :
- Pour utiliser la clause
GROUP BY
ou ORDER BY
sur une colonne de type BLOB
ou TEXT
, il faut commencer par convertir la colonne dans un type à longueur fixe. Pour cela, on utilise la fonction SUBSTRING
. Par exemple :
mysql> SELECT commentaires FROM Nom_table , SUBSTRING(commentaires,20) as
souschaîne ORDER BY souschaîne;
Si SUBSTRING n'est pas utilisé, le tri portera uniquement sur les max_sort_longueur
premiers octets de la colonne. Par défaut, max_sort_longueur
vaut 1024, et cette valeur peut être changée en utilisant l'option , lors du démarrage de MySQL. Il est possible d'utiliser la clause GROUP sur un BLOB
or TEXT
, en spécifiant la position de la colonne, et en utilisant un alias. Par exemple :
mysql> select id,substring(blob_col,1,100) FROM Nom_table
GROUP BY 2;
mysql> select id,substring(blob_col,1,100) as b FROM Nom_table
GROUP BY b;
- La taille maximale d'un objet de type est déterminée par son type, mais la quantité d'information qu'il est possible de transmettre entre le serveur et le client dépend de la quantité de mémoire vive et de la taille des buffers de communications. Il est possible de changer la taille des buffers, mais il faut le faire sur le serveur et sur le client.
Il faut bien noter que chaque valeur de type est représentée de manière interne par un objet alloué. Contrairement aux autres objets, pour qui l'espace mémoire est réservé à la création de la table.