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.

extradrmtech

Since 20 years I work on Database Architecture and data migration protocols. I am also a consultant in Web content management solutions. I am an experienced web-developer with over 10 years developing PHP/MySQL, C#, VB.Net applications ranging from simple web sites to extensive web-based business applications. When not writing code, I like to dance salsa and swing and have fun with my little family.

You may also like...

Leave a Reply