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 :
SET membre
|
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.