12.4.2 Les types BLOB et TEXT
Une valeur de type BLOB est un objet binaire de grande taille, qui peut contenir une quantité variable de données. Les quatre types BLOB ( TINYBLOB , BLOB , MEDIUMBLOB , et LONGBLOB ) ne différent que par la taille maximale de données qu'ils peuvent stocker. Taille de stockage des types .
Les quatre types TEXT ( TINYTEXT , TEXT , MEDIUMTEXT , et LONGTEXT correspondent aux types BLOB équivalents, et ont les mêmes contraintes de stockage. Les seules différences entre les colonnes de type BLOB et celles de type TEXT se situent aux niveau des tris et comparaisons : Les tris, faits sur les BLOB , contrairement à ceux faits sur les TEXT , tiennent compte de la casse. En d'autres termes, une valeur TEXT est une valeur BLOB insensible à la casse.
Si vous assignez une valeur trop grande à une colonne de type BLOB ou TEXT , la valeur sera tronquée à la taille maximale possible.Dans la majorité des cas, vous pouvez considérer une colonne de type TEXT comme une colonne de type VARCHAR , aussi grande que vous le souhaitez. De même, vous pouvez considérer une colonne de type BLOB comme une colonne de type VARCHAR BINARY . Les seules différences sont :
- Vous pouvez indexer les colonnes de type BLOB ou TEXT à partir de la version 3.23.2 de MySQL. Les versions plus anciennes ne peuvent pas indexer ces colonnes.
- Pour les index des colonnes BLOB et TEXT , vous devez spécifier une taille d'index. Pour les colonnes de type CHAR et VARCHAR , la taille du préfixe est optionnelle.
- Il n'y a pas de suppression des espaces finaux lors du stockage de valeur dans des colonnes de type BLOB et TEXT , ce qui est le cas dans pour les colonnes de type VARCHAR .
- Les colonnes BLOB et TEXT ne peuvent avoir de valeur par défaut. ( DEFAULT )
Vous pouvez rencontrer les problèmes suivants, à cause de la grande taille des colonnes de type BLOB et TEXT , lors de leur utilisation :
-
Si vous voulez utiliser les commandes
GROUP BY
ou
ORDER BY
sur une
colonne de type
BLOB
ou
TEXT
, vous devez d'abord la convertir en
un objet de taille fixe.
Le meilleur moyen est d'utiliser la fonction
SUBSTRING
. Par exemple :
Si vous le ne faites pas, seuls les max_sort_length premiers octets de la colonne seront utilisés pour le tri. La valeur par défaut de max_sort_length est 1024. Cette valeur peut être modifiée en utilisant l'option -O au démarrage du serveur mysqld . Vous pouvez utiliser la commande GROUP BY sur une colonne de type BLOB ou TEXT en spécifiant la position de la colonne, ou avec un alias :mysql> SELECT comment FROM nom_de_table,SUBSTRING(comment,20) AS substr
-> ORDER BY substr;mysql> SELECT id,SUBSTRING(blob_col,1,100) FROM nom_de_table GROUP BY 2;
mysql> SELECT id,SUBSTRING(blob_col,1,100) AS b FROM nom_de_table GROUP BY b; -
La taille maximale d'un objet
BLOB
ou
TEXT
est déterminée par son type,
mais la valeur la plus grande que vous pouvez transmettre au programme client est
déterminée par la quantité de mémoire disponible sur le serveur et par les tailles
des buffers de communication.
Vous pouvez changer la taille des buffers de communication, mais vous devez le faire
sur le serveur et le client en même temps. Choix des paramètres du serveur .
Par exemple, mysql et mysqldump vous autorises tous les deux à modifier la valeur cliente de max_allowed_packet . Voyez Choix des paramètres du serveur , L'outil de ligne de commande et mysqldump , exporter les structures de tables et les données .
Notez que chaque valeur BLOB ou TEXT est représentée en interne par un objet alloué séparément, contrairement à tous les autres types de colonne, pour lesquels la place de stockage est allouée une fois pour chaque colonne, lorsque la table est ouverte.

