http://toptech.geekaddict.net/
Bon, un tableau de plus ou de moins ne pourra faire de différence, je vais donc simplement résumer les possibilités directement tirées de la doc en essayant de trier un peu les informations et de les vulgariser.
Vulgariser, c'est expliquer avec des phrases simples quelque chose de tordu de façon à ce que ce soit compréhensible pour la plupart des humains. Et paradoxalement, il faut souvent commencer par vulgariser le mot "vulgariser" pour que ce soit clair. Voilà c'était juste pour éviter de faire fuir ceux qui croyaient que j'allais parler de façon grossière.
La taille minimale de tous les types textuels est de 1 caractère. Dans le tableau suivant, je considèrerai que M est la taille maximale (choisie dans la colonne Taille/Valeurs de phpMyAdmin ou entre parenthèses dans une requête SQL). Et L sera la longueur du texte enregistré à l'insertion (elle est donc variable dans une même table)
Type Taille maximale Espace requis
CHAR 255 M
VARCHAR 255 L+1
TINYBLOB, TINYTEXT 255 L+1
BLOB, TEXT 65 535 L+2
MEDIUMBLOB, MEDIUMTEXT 16 777 215 L+3
LONGBLOB, LONGTEXT 4 294 967 296 L+4
Les +1, +2, +3 et +4 servent tout simplement à stocker la longueur du texte enregistré. La taille de CHAR n'est pas variable contrairement aux autres.
Différences entre BLOB et TEXT
BLOB stocke les informations en binaire directement, ce qui permet par exemple d'y insérer le contenu d'une image ou d'un exécutable mais on peut aussi y mettre du texte comme dans TEXT (il n'y a alors pas besoin de définir un interclassement) et la seule différence restante est la suivante :
Citation : doc MySQL
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.
Donc si on prend une table qui ressemble à ça :
text blob
Camion Camion (en binaire)
camion camion (en binaire)
Voiture Voiture (en binaire)
voiture voiture (en binaire)
Et que vous lancez la requête suivante :
Code : SQL - Sélectionner
1
SELECT `text` FROM `testblob` WHERE `text`='camion'
Vous obtenez deux résutats : 'Camion' et 'camion'.
Alors que :
Code : SQL - Sélectionner
1
SELECT `blob` FROM `testblob` WHERE `blob`='camion'
ne donne qu'un seul résultat : 'camion'.
Il semble après quelques tests que j'ai réalisés avec phpMyAdmin sur ma version 5.1 de MySQL que CHAR ne soit pas aussi léger que la doc veut bien le dire. Je ne me permets donc pas de vous conseiller CHAR ou VARCHAR sur le point de l'optimisation.