1. Vue d’ensemble du type de données ENUM
Qu’est-ce que le type de données ENUM ?
Le type de données MySQL ENUM (énumération) stocke exactement une valeur parmi une liste prédéfinie. Comme seules les chaînes spécifiques définies dans la liste peuvent être enregistrées dans la colonne, cela aide à maintenir la cohérence des données et empêche les saisies invalides.
Par exemple, lorsque les utilisateurs doivent choisir une option parmi un ensemble limité tel que le genre ou la catégorie de produit, l’utilisation d’ENUM élimine le besoin de vérifications de validation inutiles. Voici un exemple de création d’une table incluant une colonne ENUM :
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
category ENUM('Food', 'Clothing', 'Electronics', 'Furniture') NOT NULL
);
Dans cet exemple, la colonne « category » ne peut stocker qu’une des quatre valeurs suivantes : « Food », « Clothing », « Electronics » ou « Furniture ». Cela simplifie la gestion des données et réduit le risque d’entrées incorrectes.
Principaux cas d’utilisation d’ENUM
Le type de données ENUM est principalement utilisé dans les scénarios suivants :
- Gestion des statuts : énumération des états d’avancement d’un projet tels que « Not Started », « In Progress » et « Completed ».
- Catégorisation : gestion des options de catégorie prédéfinies telles que les produits, les types d’utilisateur ou les rôles professionnels.
- Classement : niveaux de difficulté de jeu (« Beginner », « Intermediate », « Advanced ») ou évaluations de produits (« Good », « Average », « Poor »).
2. Avantages et inconvénients d’ENUM
Avantages
- Intégrité des données améliorée : avec ENUM, seules les valeurs incluses dans la liste prédéfinie peuvent être stockées, garantissant la cohérence des données et facilitant la gestion. Par exemple, lors de la gestion du genre, seules des valeurs spécifiques telles que « Male » ou « Female » sont autorisées, ce qui empêche les saisies incorrectes.
- Efficacité de stockage : chaque valeur ENUM reçoit en interne un indice entier, ce qui signifie que les valeurs sont stockées comme des entiers. Comparé à VARCHAR, cela réduit l’utilisation de l’espace de stockage. Par exemple, stocker des informations de taille comme « small » ou « large » avec VARCHAR consomme plus d’espace, alors que les définir avec ENUM permet un stockage plus efficace.
Inconvénients
- Manque de flexibilité : comme ENUM n’accepte que des valeurs prédéfinies, l’ajout de nouvelles valeurs nécessite de modifier la structure de la table. Il n’est donc pas adapté aux scénarios où les options changent fréquemment et dynamiquement.
- Gestion d’erreurs complexe : si une valeur invalide est insérée, une erreur peut survenir ou une chaîne vide peut être stockée. Ce comportement peut compliquer le débogage pour les développeurs.
3. Configuration et exemples d’utilisation d’ENUM
Configuration de base et gestion des erreurs
La configuration d’un type de données ENUM consiste simplement à spécifier la liste des chaînes autorisées. Voici un exemple de définition d’une colonne ENUM dans une table :
CREATE TABLE shirts (
id INT AUTO_INCREMENT PRIMARY KEY,
size ENUM('XS', 'S', 'M', 'L', 'XL') NOT NULL
);
Dans ce cas, la colonne « size » ne peut stocker qu’une des cinq valeurs : « XS », « S », « M », « L » ou « XL ». Si vous essayez d’insérer une valeur non incluse dans la liste (par exemple, « XXL »), une erreur Data truncated se produira. Cela empêche le stockage de valeurs hors de la liste prédéfinie et aide à maintenir la cohérence des données.
Exemple pratique
Ensuite, voici un exemple d’utilisation d’ENUM pour gérer les rôles d’utilisateur (« Administrator », « Regular User », « Guest ») :
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
role ENUM('Administrator', 'Regular User', 'Guest') NOT NULL
);
Lors de l’attribution de permissions différentes selon les rôles, l’utilisation d’une colonne ENUM facilite le maintien de l’intégrité des données. 
4. Indexes ENUM et gestion du NULL
Utilisation des valeurs d’index
Chaque valeur ENUM reçoit un indice numérique commençant à 1 selon sa position dans la liste. Par exemple, considérez la colonne ENUM suivante stockant des informations de taille :
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
size ENUM('S', 'M', 'L', 'XL')
);
« S » reçoit l’index 1, « M » l’index 2, etc. Ces valeurs d’index peuvent également être utilisées dans les conditions WHERE pour des opérations de données efficaces.
SELECT * FROM products WHERE size = 2;
Cette requête récupère les enregistrements où la taille est « M ».
Gestion des NULL et des chaînes vides
Si NULL est autorisé dans une colonne ENUM, les valeurs NULL peuvent être stockées même si elles ne font pas partie de la liste prédéfinie. De plus, si des données invalides sont insérées et converties en chaîne vide, elles sont stockées avec l’index 0. Ce comportement permet de détecter les entrées incorrectes.
5. Jeux de caractères et collations dans ENUM
Comment configurer les jeux de caractères et les collations
Comme les types CHAR et VARCHAR, le type de données ENUM vous permet de spécifier un jeu de caractères et une collation. C’est particulièrement important lors de la création de systèmes multilingues ou d’exécutions de recherches qui dépendent des règles de collation. Voici un exemple :
CREATE TABLE documents (
id INT AUTO_INCREMENT PRIMARY KEY,
language ENUM('Japanese', 'English', 'Chinese') CHARACTER SET utf8 COLLATE utf8_general_ci
);
Dans cet exemple, le jeu de caractères UTF-8 et une collation générale sont spécifiés.
6. Extensibilité et alternatives à ENUM
Stratégies pour étendre ENUM
Comme ENUM manque de flexibilité pour stocker des valeurs arbitraires, il n’est pas adapté aux données qui évoluent dynamiquement. Une approche consiste à ajouter une option « Autre » et à fournir une colonne de texte libre séparée :
ALTER TABLE products
MODIFY COLUMN category ENUM('Food', 'Clothing', 'Electronics', 'Furniture', 'Other') NOT NULL,
ADD COLUMN category_other VARCHAR(255) DEFAULT NULL;
De cette façon, les valeurs non incluses dans la liste ENUM peuvent être stockées dans une colonne VARCHAR séparée, permettant une gestion dynamique si nécessaire.
Utilisation de SET ou VARCHAR comme alternatives
Comme alternatives à ENUM, vous pouvez envisager le type de données SET (qui permet des sélections multiples) ou le type de données VARCHAR plus flexible, selon les exigences de votre application.


