| 12.4 Les types chaînes
 12 Types de colonnes
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Les types CHAR et VARCHAR
 ->Les types BLOB et TEXT
 . Le type ENUM
 . Le type SET
 
 
 | 
  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 : 
 
MyODBC
  considère les valeurs  
BLOB
  comme des  
LONGVARBINARY
  et
les valeurs  
TEXT
  comme des  
LONGVARCHAR
 .
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. 
 |