Pour les types de données MySQL «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 dont je suis conscient est que ENUM ne permet qu'une seule valeur à être sélectionnée par rapport à SET permet de sélectionner plusieurs valeurs.
Réponses:
Comme l'indique la documentation MySQL :
la source
(a, b, c, d)
ne sera pas rejetée. Seule lad
volonté sera rejetée, entraînant ainsi la valeur(a, b, c)
.analogie:
ENUM = champs radio (seules les valeurs acceptées sont celles listées, ne peut en choisir qu'une)
SET = cases à cocher (seules les valeurs acceptées sont celles listées, peuvent en choisir plusieurs)
la source
Enum et Set dépendent totalement des exigences, comme si vous avez une liste de boutons radio dont un seul peut être choisi à la fois, utilisez Enum. Et si vous avez une liste de cases à cocher où à la fois plusieurs éléments peuvent être choisis, utilisez set.
la source
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 constaterez que SET est en fait 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 être stocké qu'une seule fois à chaque fois. Et vous constaterez que les résultats des 2 dernières lignes seront tous les deux vides.
la source
En fait, c'est assez simple:
Lorsque vous définissez un ENUM ('Oui', 'Non', 'Peut-être'), vous devez INSÉRER une seule de ces valeurs (ou leur numéro d'index de position)
Lorsque vous définissez un SET ('R', 'W', 'X'), vous pouvez INSÉRER une chaîne vide, ou une ou plusieurs de ces valeurs. Si vous insérez quelque chose qui ne figure pas dans l'ensemble prédéfini, une chaîne vide est insérée à la place. Notez qu'avant d'insérer toutes les valeurs en double sont ignorées, une seule instance de chaque valeur autorisée est donc insérée.
J'espère que cela clarifie les choses.
Veuillez noter que la réponse de Winbobob est incorrecte et contient des exemples défectueux, car lors de l'insertion de plusieurs valeurs, les valeurs doivent être des chaînes, séparées par des virgules. Tous ses inserts n'insèrent en fait qu'une seule valeur (et les deux derniers ne font pas partie de l'ensemble défini)
la source