| 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 |
| " " |
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).
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.
|