7.2.7.1 Les types CHAR et VARCHAR

Les types CHAR et VARCHAR sont similaires, mais ils diffèrent par la manière dont ils sont stockés.

Les valeurs de type CHAR sont de longueur fixée. La longueur est déclarée lors de la création de la table. Cette longueur peut aller de 1 à 255. Quand une valeur de type CHAR est enregistrée, elle est complétée à gauche par des espaces. Lorsque MySQL retourne cette valeur, ces espaces sont effacés.

Les valeurs de type VARCHAR sont de longueur variable. Une longueur maximum est déclarée lors de la création de la table. Cette longueur peut aller de 1 à 255. Quand une valeur de type CHAR est enregistrée, seul les caractères utiles sont enregistrés, plus un octet pour enregistrer la taille de la chaîne. Les ne sont pas complétée à gauche par des espaces, mais les espaces en début de valeurs sont effacés lors de l'enregistrement (cette fonction d'effacement des espaces à l'enregistrement n'est pas spécifiée dans ANSI SQL).

Lors de l'affectation d'une valeur de type CHAR ou VARCHAR dans une colonne trop petite, la valeur est tronquée à la taille de la colonne.

La table ci dessous illustre les différences de taille entre les deux types :
Value CHAR(4) Storage required VARCHAR(4) Storage required
'' ' ' 4 bytes '' 1 byte
'ab' 'ab ' 4 bytes 'ab' 3 bytes
'abcd' 'abcd' 4 bytes 'abcd' 5 bytes
'abcdefgh' 'abcd' 4 bytes 'abcd' 5 bytes

Les valeurs retournées seront les mêmes, car dans tous les cas, les espaces situés en début de chaîne seront effacées

Les valeurs de type CHAR et VARCHAR sont triées et comparées sans tenir compte de la casse, à moins que l'option BINARY ai été activée lors de la création de la table. Cette option signifie que cette colonne sera triée et comparée en tenant compte de la casse, et en fonction de l'ordre de la table ASCII de la machine qui supporte MySQL.

Le mode est contagieux : Cela signifie que si une colonne de type binaire est utilisée dans une expression, la comparaison tiendra compte de la casse.

MySQL peut changer spontanément les types de colonne lors de la création d'une table.. 7.6.1 Modifications automatiques de type de colonne.