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.