Les types CHAR et VARCHAR
sont similaires, mais diffèrent dans la manière dont ils sont
stockés et récupérés.
La longueur d'une colonne CHAR est fixée à
la longueur que vous avez défini lors de la création de la
table. La longueur peut être n'importe quelle valeur entre 1 et
255. (Dans la version 3.23 de MySQL, la longueur est comprise
entre 0 et 255.) Quand une valeur CHAR est
enregistrée, elle est complété à droite avec des espaces
jusqu'à atteindre la valeur fixée. Quand une valeur de
CHAR est lue, les espaces en trop sont
retirés.
Les valeurs contenues dans les colonnes de type
VARCHAR sont de tailles variables. Vous
pouvez déclarer une colonne VARCHAR pour que
sa taille soit comprise entre 1 et 255, exactement comme pour
les colonnes CHAR. Par contre, contrairement
à CHAR, les valeurs de
VARCHAR sont stockées en utilisant autant de
caractères que nécessaire, plus un octet pour mémoriser la
longueur. Les valeurs ne sont pas complétées. Au contraire,
les espaces finaux sont supprimés avant stockage (ce qui ne
fait pas partie des spécifications ANSI SQL).
Si vous assignez une chaîne de caractères qui dépasse la
capacité de la colonne CHAR ou
VARCHAR, celle ci est tronquée jusqu'à la
taille maximale du champ.
Le tableau suivant illustre les différences entre les deux
types de colonnes en montrant les différences entre
l'enregistrement dans une colonne CHAR(4) ou
VARCHAR(4) :
| Valeur | CHAR(4) |
Espace requis | VARCHAR(4) |
Espace requis |
'' |
' ' |
4 octets | '' |
1 octet |
'ab' |
'ab ' |
4 octets | 'ab' |
3 octets |
'abcd' |
'abcd' |
4 octets | 'abcd' |
5 octets |
'abcdefgh' |
'abcd' |
4 octets | 'abcd' |
5 octets |
Les valeurs lues dans les colonnes de type
CHAR(4) et VARCHAR(4)
seront les mêmes dans tous les cas, car les espaces finaux sont
retirés des valeurs issues de colonnes de type
CHAR lors de la lecture.
Les valeurs dans les colonnes CHAR et
VARCHAR sont classées et comparées sans
tenir compte de la casse, à moins que l'attribut
BINARY n'ai été spécifié lors de la
création de la table. L'attribut BINARY
signifie que les valeurs sont classées et triées en tenant
compte de la casse, suivant l'ordre des caractères ASCII de la
machine ou est installé le serveur MySQL.
BINARY n'affecte pas les méthodes de lecture
et de stockage des valeurs.
L'attribut BINARY se propage dans une
expression : il suffit qu'une seule colonne, utilisée dans une
expression, ait l'attribut BINARY pour que
toute l'expression ne tienne plus compte de la casse.
MySQL peut changer automatiquement le type d'une colonne
CHAR ou VARCHAR lors de la
création de la table. See
Section 13.2.5.1, « Modification automatique du type de colonnes ».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
