7.2.7.3 Le type ENUM

Le type est ENUM une chaîne, dont la valeur est choisi dans une liste de valeurs autorisées, et spécifiées à la création de la table.

Cette valeur peut prendre les valeurs ("") ou NULL sous certaines conditions :

  • Lors de l'insertion d'une valeur invalide dans un ENUM ( par exemple, une chaîne qui ne serait pas dans la liste des valeurs autorisées), une chaîne vide est insérée à la place, afin d'indiquer une erreur.
  • Si une ENUM est déclarée NULL, NULL sera alors une valeur valide pour cette colonne, et la valeur par défaut sera aussi NULL. Si une ENUM est déclarée NOT NULL, la valeur par défaut sera le premier élément de la liste de valeurs autorisées.

Chaque énumération a un index.

  • Les valeurs autorisées sont ordonnées et indexées à partir de 1.
  • L'index de la valeur erreur est 0. Cela signifie qu'il est possible d'utiliser la clause SELECT pour rechercher des lignes qui auraient une valeur ENUM invalide :
mysql> SELECT * FROM Nom_table WHERE enum_col=0;
  • L'index de la valeur NULL est NULL.

Par exemple, une colonne de type ENUM("un", "deux", "trois") peut prendre chacune des valeurs ci-dessous. L'index de la valeur est aussi indiqué.

Value Index
NULL NULL
"" 0
"one" 1
"two" 2
"three" 3

Une énumération peut avoir au maximum 65535 éléments.

La casse des lettres est sans importance pour l'affection de valeur dans une colonne de type ENUM. Cependant, lorsque ces valeurs sont retournées, elles tiennent compte de la casse des lettres tels qu'elle a été spécifiées à la création de la table.

Lire une valeur de type ENUM dans un contexte numérique permet d'accèder à l'index de la valeur. De même, lors de l'affectation d'un nombre dans une valeur ENUM, le nombre sera traité comme un index, et la valeur enregistrée sera celle de l'énumération, à l'index précisé.

Les valeurs d'une énumération sont triée en fonction de l'ordre dans lequel les éléments de l'énumération sont enregistrés lors de la création de la colonne (en d'autres termes, les valeurs d'une énumération sont triées en fonction de leur index). Par exemple, "a" sera placé avant "b" pour ENUM("a", "b"), mais "b" sera placé avant "a" pour ENUM("b", "a").les chaînes vides sont placées avant les chaînes non vides, et la valeur NULL passe avant toutes les autres.

Pour visualiser toutes les valeurs d'une colonne de type, il faut utiliser SHOW COLUMNS FROM Nom_table LIKE Nom_col_enum et détailler les valeurs de la deuxième colonne.