-
La modification de l'ensemble de valeurs dans un ENUM nécessite un
ALTER TABLE
ce qui pourrait entraîner une restructuration de la table - une opération incroyablement coûteuse (la restructuration de la table ne se produit pas si vous ajoutez simplement une nouvelle valeur à la fin de la définition ENUM, mais si vous en supprimez une ou modifiez l'ordre, une table restructurer). Alors que la modification de l'ensemble de valeurs dans une table de recherche est aussi simple que INSERT ou DELETE. -
Il n'y a aucun moyen d'associer d'autres attributs aux valeurs d'un ENUM, comme ceux qui sont retirés et ceux qui peuvent être placés dans une liste déroulante de votre interface utilisateur. Cependant, une table de recherche peut inclure des colonnes supplémentaires pour ces attributs.
-
Il est très difficile d'interroger un ENUM pour obtenir une liste de valeurs distinctes, vous obligeant essentiellement à interroger la définition du type de données à partir de
INFORMATION_SCHEMA
, et en analysant la liste à partir du BLOB renvoyé. Vous pouvez essayerSELECT DISTINCT status
de votre table, mais cela n'obtient que les valeurs d'état actuellement utilisées, qui peuvent ne pas être toutes les valeurs de l'ENUM. Cependant, si vous conservez des valeurs dans une table de recherche, il est facile d'interroger, de trier, etc.
Je ne suis pas un grand fan d'ENUM, comme vous pouvez le constater. :-)
Il en va de même pour les contraintes CHECK qui comparent simplement une colonne à un ensemble fixe de valeurs. Bien que MySQL ne supporte pas les contraintes CHECK de toute façon.
Mise à jour :MySQL 8.0.16 implémente désormais CHECK contraintes .