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 :
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.
Chaque élément de l'énumération dispose d'un index :
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
.
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é :
Valeur | Index |
NULL |
NULL |
"" |
0 |
"un" |
1 |
"deux" |
2 |
"trois" |
3 |
Une énumération peut avoir un maximum de 65535 éléments.
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 :
mysql> SELECT enum_col+0 FROM nom_de_table;
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
:
numbers ENUM('0','1','2')
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).
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.