Mysql : CHAR et VARCHAR
Les types CHAR
et VARCHAR
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.