7.2.7.2 Les types BLOB et TEXT

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.