Chaînes de type texte
CHAR et VARCHAR
Pour stocker un texte relativement court (moins de 255 octets), vous pouvez utiliser les types CHAR et VARCHAR. Ces deux
types s'utilisent avec un paramètre qui précise la taille que peut prendre votre texte (entre 1 et 255). La différence entre CHAR et
VARCHAR est la manière dont ils sont stockés en mémoire. Un CHAR(x) stockera toujours x octets, en remplissant si nécessaire
le texte avec des espaces vides pour le compléter, tandis qu'un VARCHAR(x) stockera jusqu'à x octets (entre 0 et x), et stockera
en plus en mémoire la taille du texte stocké.
Si vous entrez un texte plus long que la taille maximale définie pour le champ, celui-ci sera tronqué.
Je parle ici en octets, et non en caractères pour ce qui est de la taille des champs. C'est important : si la plupart des
caractères sont stockés en mémoire sur un seul octet, ce n'est pas toujours le cas. Par exemple, lorsque l'on utilise
l'encodage UTF-8, les caractères accentués (é, è, ...) sont codés sur deux octets.
Petit tableau explicatif, en prenant l'exemple d'un CHAR ou d'un VARCHAR de 5 octets maximum :
Texte
CHAR(5) Mémoire requise VARCHAR(5) Mémoire requise
''
'
'
5 octets
''
1 octet
'tex'
'tex ' 5 octets
'tex'
4 octets
'texte'
'texte' 5 octets
'texte'
6 octets
'texte trop long' 'texte' 5 octets
'texte'
6 octets
Vous voyez donc que dans le cas où le texte fait la longueur maximale autorisée, un CHAR(x) prend moins de place en mémoire
qu'un VARCHAR(x). Préférez donc le CHAR(x) dans le cas où vous savez que vous aurez toujours x octets (par exemple si
vous stockez un code postal). Par contre, si la longueur de votre texte risque de varier d'une ligne à l'autre, définissez votre
colonne comme un VARCHAR(x).
TEXT
Et si je veux pouvoir stocker des textes de plus de 255 octets ?
Il suffit alors d'utiliser le type TEXT, ou un de ses dérivés TINYTEXT, MEDIUMTEXT ou LONGTEXT. La différence entre ceuxci étant la place qu'ils permettent d'occuper en mémoire. Petit tableau habituel :
Type
Longueur maximale
Mémoire occupée
TINYTEXT
2^8 octets
Longueur de la chaîne + 1 octet
TEXT
2^16 octets
Longueur de la chaîne + 2 octets
MEDIUMTEXT 2^24 octets
Longueur de la chaîne + 3 octets
LONGTEXT
2^32 octets
Longueur de la chaîne + 4 octets
Chaînes de type binaire
Comme les chaînes de type texte que l'on vient de voir, une chaîne binaire n'est rien d'autre qu'une suite de caractères.
Cependant, si les textes sont affectés par l'encodage et l'interclassement, ce n'est pas le cas des chaînes binaires. Une chaîne
binaire n'est rien d'autre qu'une suite d'octets. Aucune interprétation n'est faite sur ces octets. Ceci a deux conséquences
principales.
Une chaîne binaire traite directement l'octet, et pas le caractère que l'octet représente. Donc par exemple, une recherche
sur une chaîne binaire sera toujours sensible à la casse, puisque "A" (code binaire : 01000001) sera toujours différent de
"a" (code binaire : 01100001).
Tous les caractères sont utilisables, y compris les fameux caractères de contrôle non-affichables définis dans la table
ASCII.
Partie 1 : MySQL et les bases du langage SQL
28/414
www.openclassrooms.com
Précédent

- 28/413

Suivant