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