Un SET est une chaîne qui peut avoir zéro
        ou plusieurs valeurs, chacune doit être choisie dans une liste
        de valeurs définies lors de la création de la table. Les
        valeurs des colonnes SET composées de
        plusieurs membres sont définies en séparant celles-ci avec des
        virgules (‘,’). Ce qui fait que
        la valeur d'un membre de SET ne peut contenir
        lui même de virgule.
      
        Par exemple, une colonne définie en tant que SET("un",
        "deux") NOT NULL peut avoir l'une de ces valeurs :
      
"" "un" "deux" "un,deux"
        Un SET peut avoir au plus 64 membres.
      
        A partir de la version 3.23.51, les espaces en trop sont
        automatiquement effacés des membres de SET
        lorsque la table est créée.
      
        MySQL enregistre les valeurs de SET
        numériquement. Le bit de poids faible de la valeur correspond
        alors au premier élément de la liste. Si vous utilisez une
        valeur SET dans un contexte numérique, les
        bits des éléments dans cet ensemble seront mis à un, et les
        autres à zéro. Par exemple, vous pouvez obtenir un entier à
        partir d'un ensemble comme ceci :
      
mysql> SELECT col_set+0 FROM nom_de_table;
        Si un nombre est enregistré dans une colonne
        SET, les bits un à un de ce nombre
        représenteront les éléments placés dans cet ensemble.
        Supposons qu'une colonne est spécifiée en tant que
        SET("a","b","c","d"), les membres ont alors
        les valeurs suivantes :
      
| SETmembre | Valeur décimale | Valeur binaire | 
| a | 1 | 0001 | 
| b | 2 | 0010 | 
| c | 4 | 0100 | 
| d | 8 | 1000 | 
        Si vous assignez 9 à cette colonne, cela
        donne 1001 en binaire, ce qui fait que les
        valeurs du premier et quatrième membres "a"
        et "d" sont sélectionnés et la valeur
        résultante est "a,d".
      
        Pour les valeurs se composant de plus d'un membre du
        SET, l'ordre des membres n'a pas d'importance
        lors des insertions. Le nombre d'occurrence d'un élément
        n'importe pas non plus. Lorsque la valeur sera lue
        ultérieurement, chaque élément n'apparaîtra qu'une seule
        fois, et dans l'ordre donné à la déclaration de la colonne.
        Par exemple, si une colonne est spécifiée comme
        SET("a","b","c","d"), alors
        "a,d", "d,a", et
        "d,a,a,d,d" seront tous représentés par
        "a,d".
      
        Si vous spécifiez une valeur incorrecte dans une colonne
        SET, la valeur sera ignorée.
      
        Les valeurs de SET sont triées
        numériquement. La valeur NULL précède
        toutes les autres.
      
        Normalement, vous exécuterez un SELECT sur
        une colonne SET en utilisant l'opérateur
        LIKE ou la fonction
        FIND_IN_SET() :
      
mysql>SELECT * FROM nom_de_table WHERE set_col LIKE '%value%';mysql>SELECT * FROM nom_de_table WHERE FIND_IN_SET('value',set_col)>0;
Mais ce qui suit fonctionnera aussi :
mysql>SELECT * FROM nom_de_table WHERE set_col = 'val1,val2';mysql>SELECT * FROM nom_de_table WHERE set_col & 1;
La première requête cherche les lignes qui correspondent exactement. La seconde ne cherche que les lignes contenant le premier membre du set.
        Si vous voulez connaître toutes les valeurs possible d'une
        colonne SET, vous devez utiliser :
        SHOW COLUMNS FROM nom_de_table LIKE
        nom_colonne_set et étudier la définition du
        SET dans la seconde colonne.
      
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

