123 votes

MySQL enum vs. set

Pour les données MySQL de type "enum" et "set", quelles sont les différences, les avantages et les inconvénients de l'utilisation de l'un par rapport à l'autre ?

Exemple de type de données :

  • enum('A', 'B', 'C')
  • set('A', 'B', 'C')

La seule différence que je connaisse est que ENUM ne permet de sélectionner qu'une seule valeur alors que SET permet de sélectionner plusieurs valeurs.

277voto

Brad Kent Points 46

Analogique :
ENUM = champs radio (les seules valeurs acceptées sont celles listées, on ne peut en choisir qu'une)
SET = champs à cocher (les seules valeurs acceptées sont celles de la liste, on peut en choisir plusieurs)

79voto

user2001117 Points 1068

Comme le Documentation sur MySQL États :

La définition d'une colonne ENUM ou SET agit comme une contrainte sur les valeurs. saisies dans la colonne. Une erreur se produit pour les valeurs qui ne satisfont pas à ces conditions :

Une valeur ENUM doit être l'une de celles listées dans la définition de la colonne, ou son équivalent numérique interne. La valeur ne peut pas être la valeur d'erreur (c'est-à-dire 0 ou la chaîne vide). Pour une colonne définie comme ENUM('a', 'b', 'c'), les valeurs telles que '', 'd' ou 'ax' sont illégales et sont rejetées. rejetées.

Une valeur SET doit être la chaîne vide ou une valeur composée uniquement des valeurs énumérées dans la définition de la colonne, séparées par des virgules. valeurs énumérées dans la définition de la colonne, séparées par des virgules. Pour une colonne définie comme SET('a','b','c'), des valeurs telles que 'd' ou 'a,b,c,d' sont illégales et sont rejetées. sont illégales et sont rejetées.

48voto

Abhishek Singh Points 111

Enum et Set dépendent totalement des besoins, par exemple si vous avez une liste de boutons radio où un seul peut être choisi à la fois, utilisez Enum. Et si vous avez une liste de cases à cocher où plus d'un élément peut être choisi à la fois, utilisez Set.

27voto

Winbobob Points 349
CREATE TABLE setTest(
  attrib SET('bold','italic','underline')
);

INSERT INTO setTest (attrib) VALUES ('bold');
INSERT INTO setTest (attrib) VALUES ('bold,italic');
INSERT INTO setTest (attrib) VALUES ('bold,italic,underline');

Vous pouvez copier le code ci-dessus et le coller dans mysql, et vous trouverez que SET Il s'agit en fait d'une collection. Vous pouvez stocker chaque combinaison d'attributs que vous déclarez.

CREATE TABLE enumTest(
 color ENUM('red','green','blue')
);

INSERT INTO enumTest (color) VALUES ('red');
INSERT INTO enumTest (color) VALUES ('gray');
INSERT INTO enumTest (color) VALUES ('red,green');

Vous pouvez également copier le code ci-dessus. Et vous constaterez que chaque ENUM ne peut en fait être stocké qu'une seule fois à chaque fois. Et vous constaterez que les résultats des deux dernières lignes seront tous deux vides.

11voto

Harly H. Points 563

En fait, c'est assez simple :

Lorsque vous définissez un ENUM('Oui', 'Non', 'Peut-être') alors vous doit INSERER une seule de ces valeurs (ou leur numéro d'index positionnel)

Lorsque vous définissez un SET('R', 'W', 'X') alors vous peut INSERER une chaîne vide, o une ou plusieurs de ces valeurs. Si vous insérez quelque chose qui n'est pas dans l'ensemble prédéfini, une chaîne vide est insérée à la place. Notez qu'avant l'insertion, toutes les valeurs en double sont éliminées, de sorte qu'une seule instance de chaque valeur autorisée est insérée.

J'espère que ça va éclaircir les choses.

Veuillez noter que la réponse de Winbobob est incorrecte et contient des exemples erronés, car lors de l'insertion de valeurs multiples, les valeurs doivent être des chaînes de caractères, séparées par des virgules. Toutes ses insertions n'insèrent en fait qu'une seule valeur (et les deux dernières ne font pas partie de l'ensemble défini).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X