http://toptech.geekaddict.net/
Il existe deux types quasi-identiques pour sélectionner des valeurs prédéfinies : SET et ENUM.
Le type SET
Les valeurs possibles de `piece` sont donc 'pile', 'face' mais aussi 'pile' et 'face' (noté 'pile,face' dans une requête SQL) et aucune valeur (noté ''). Et tout ceci ne prend qu'un quart d'octet alors qu'il faudrait 4 octets pour stocker le texte dans un VARCHAR. Bien sûr on ne peut pas couper un octet en 4, mais je signifiais par là qu'il y a encore de la place pour 6 autres valeurs au choix dans ce champ SET.
Voilà comment est stocké en binaire les 4 valeurs possibles pour un champ SET qui contient 2 valeurs prédéfinies :
Valeur SQL Valeur binaire
'' 00000000
'pile' 00000001
'face' 00000010
'pile,face' 00000011
Donc pour chaque bit de l'octet, une valeur peut être sélectionnée ou non (1 ou 0). Les SET stockent ensuite ce nombre binaire comme les types numériques. Il peut donc peser 1, 2, 3, 4 ou 8 octets selon le nombre de valeurs prédéfinies :
Nombre de valeurs Taille en octets
1 à 8 1
9 à 16 2
17 à 24 3
25 à 32 4
33 à 64 8
Le type ENUM
Le type ENUM lui ne peut pas prendre plusieurs valeurs. C'est pile ou face... Ou tranche à la limite mais pas de mélange. Cela permet en revanche de prendre beaucoup moins de place. À chaque valeur est associée un nombre converti en binaire et stocké dans un octet. Donc de 2 à 255 valeurs prédéfinies, le ENUM ne prend qu'un seul octet. Et bien que sa taille maximale soit de 2 octets, cela permet tout de même d'aller jusqu'à 65 535 valeurs.