| 12.4 Les types chaînes
 12 Types de colonnes
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Les types CHAR et VARCHAR
 . Les types BLOB et TEXT
 ->Le type ENUM
 . Le type SET
 
 
 | 
  12.4.3 Le type ENUM 
Une énumération  
ENUM
  est une chaîne dont la valeur est choisie parmi une liste
de valeurs autorisées lors de la création de la table. 
 
 
Cette chaîne peut aussi être la chaîne vide ( 
""
 ) ou  
NULL
  dans certaines circonstances : 
 
Chaque élément de l'énumération dispose d'un index :
Si vous insérez une valeur illégale dans une énumération  
ENUM
  (c'est à dire, 
une chaîne qui n'est pas dans la liste de valeurs autorisées), la chaîne vide est insérée 
pour représenter une erreur. Cette chaîne peut être distinguée d'une chaîne vide 'normale' par
le fait que cette chaîne à la valeur numérique 0. Nous reviendrons sur ce point plus tard. 
Si une colonne d'énumération est déclarée  
NULL
 ,  
NULL
  devient aussi une valeur autorisée,
et la valeur par défaut est alors  
NULL
 . 
Si une colonne d'énumération est déclarée  
NOT NULL
 , la valeur par défaut est le premier 
élément de la liste des valeurs autorisées. 
 
Par exemple, une colonne créée comme  
ENUM("un", "deux", "trois")
  peut prendre 
n'importe quelle valeur ci-dessous. L'index de chaque valeur est aussi présenté :
Les valeurs de la liste des valeurs autorisées sont indexées à partir de 1.
L'index de la chaîne vide (cas d'erreur) est 0. Cela signifie que vous pouvez utiliser 
la sélection suivante pour repérer les valeurs d'énumération invalides : 
| 
mysql> SELECT * FROM nom_de_table WHERE enum_col=0;
 | 
L'index de la valeur  
NULL
  est  
NULL
 .
 
Une énumération peut avoir un maximum de 65535 éléments.
| Valeur | Index |  
| NULL | NULL |  
| "" | 0 |  
| "un" | 1 |  
| "deux" | 2 |  
| "trois" | 3 |  
A partir de la version 3.23.51, les espaces en début et fin de chaîne sont
automatiquement supprimés des éléments de l'énumération  
ENUM
  lorsque la
table est créée.
La casse des lettres est sans importance lors de l'assignation de valeurs dans une
énumération. Cependant, les valeurs lues dans la base auront la même casse que celle 
spécifiée lors de la création de la table. 
Si vous lisez le contenu d'une énumération dans un contexte numérique, l'index de la 
valeur  
ENUM
  sera retournée. Par exemple, vous pouvez lire des valeurs numériques 
comme ceci :
 Si vous stockez un nombre dans une colonne de type  
ENUM
 , le nombre sera traité comme 
un index, et la valeur stockée sera celle de l'élément ayant cet index (Attention, cela ne fonctionnera
pas avec les commandes  
LOAD DATA
 , car cette dernière traite toutes les valeurs comme des chaînes).
Il est déconseillé de stocker des valeurs numériques dans un  
ENUM
  car cela engendre des
confusions. Par exemple, la colonne suivante est une énumération de chaînes
contenant les valeurs  
'0'
 ,  
'1'
  et  
'2'
 , mais leur valeur numérique
est  
1
 ,  
2
  et  
3
  :| 
mysql> SELECT enum_col+0 FROM nom_de_table;
 | 
 Les valeurs de type  
ENUM
  sont triées en fonction de l'ordre des éléments, fixé à la création de la 
table (en d'autres termes, les valeurs  
ENUM
  sont stockées en fonction de leur index). Par exemple, 
 
"a"
  précède  
"b"
  dans l'énumération  
ENUM("a", "b")
 , mais  
"b"
  précède  
"a"
  dans 
l'énumération  
ENUM("b", "a")
 . La chaîne vide précède toujours les chaînes non vides,
et  
NULL
  précède toutes les valeurs. 
Si vous voulez connaître toutes les valeurs possibles d'une colonne de type  
ENUM
 , pensez à utiliser
cette commande :  
SHOW COLUMNS FROM nom_de_table LIKE enum_column_name
 , puis analysez la définition
de la colonne de type  
ENUM
  (deuxième colonne dans le résultat).| 
numbers ENUM('0','1','2')
 | 
 |