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.
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.
|