Page 1 sur 1

ENUM ou TINYINT ?

Posté : 30 oct. 2006, 15:42
par Sined
Bonjour,
Je voudrais savoir si je devrais utiliser un ENUM ou un TINYINT pour une colonne qui admet comme valeurs 0,1,2,3,4,5,6,7,8 et 9

Code : Tout sélectionner

`nivo` tinyint(1) unsigned NOT NULL default '0',
ou

Code : Tout sélectionner

`nivo` enum('0','1','2','3','4','5','6','7','8','9') NOT NULL default '0',
Logiquement je devrais utiliser le ENUM je crois, mais lequels des deux est le plus rapide, et prennent-t'ils autant de place ?

Merci d'avance

Posté : 30 oct. 2006, 16:26
par mere-teresa

Posté : 30 oct. 2006, 16:36
par Sined
Ton lien ne m'aide pas vraiment...
Je sais juste maintenant que les deux forme, dans mon utilisation, prennent toutes les deux 1octet mais je ne sais pas laquelle est préférable ni laquelle et la plus rapide lors de l'écriture, lecture...

Posté : 30 oct. 2006, 16:46
par Ajoloca
Bonjour,

Disons que le type 'ENUM' t'évite certains controles (plage de valeurs) mais te restraint aussi dans l'évolution.

Question rapidité, je ne suis pas sur que l'on puisse faire la difference entre l'un et l'autre surtout avec si peu de valeurs.

Posté : 30 oct. 2006, 16:47
par mcorgnet
De fait, les deux utilisant des caractéristiques similaires, jouant sur un seul octet, mysql ira aussi vite avec l'un qu'avec l'autre.

Posté : 30 oct. 2006, 18:50
par mere-teresa
Pour le moment, c'est strictement pareil pour les deux types. Quand tu cherches à optimiser tes tables MySQL te propose des ENUM, parce que toutes les valeurs lui sont connues d'avances...mais étant donné qu'un TINYINT peut aller de...0 à 9, si tu utilises toute la plage, c'est pareil.

Posté : 30 oct. 2006, 19:53
par Ajoloca
Re,

Je crois que le 'TINYINT' peut prendre 256 valeurs (de -128 à +127)
et un 'UNSIGNED TINYINT' de 0 à +255

Posté : 30 oct. 2006, 20:28
par albat
Le type enum est l'ennemi juré de l'évolutivité.

L'utiliser pour mesurer l'échelle de Richter, par exemple, est maladroit
puisqu'on utilise désormais une échelle ouverte de Richter
qui a supprimé l'ancienne limite supérieure (égale à 9).

En revanche, un type enum peut très bien convenir à un type de données
dont l'échantillon de valeurs restera éternellement constant et limité.
Le sexe d'une personne, par exemple : Masculin/Féminin = 2 valeurs.



- Ah ouais ? Et Amanda Lear ? :twisted:
- Et merde...
](*,)

Posté : 30 oct. 2006, 20:31
par Ajoloca
Re,
Et les transexuels ??? :-k

Posté : 30 oct. 2006, 20:41
par Cyrano
Je crois que le 'TINYINT' peut prendre 256 valeurs (de -128 à +127)
et un 'UNSIGNED TINYINT' de 0 à +255
C'est juste, mere-teresa a bien écrit "qu'un TINYINT peut aller de...0 à 9", sous-entendu "mais n'est pas nécessairement limité à cette amplitude" :)

Enfin, il y aurait peut-être lieu d'explorer la possibilité d'utiliser le type SET, moins bloquant que le type ENUM sauf erreur de mes sens abusés ;)

Posté : 31 oct. 2006, 01:06
par Sined
Bon bun.. merci pour toutes ces réponses.
Finalement j'ai laissé le tinyint(1) mais j'avais justement un camp sexe et donc je l'ai remplacé par un :

Code : Tout sélectionner

ENUM('','masculin','feminin')
C'est bien plus logique que varchar(7)

Posté : 31 oct. 2006, 01:09
par Ajoloca
Re,
Et les transexuels ??? :-k
C'estait pour la blague!

Posté : 31 oct. 2006, 09:28
par albat
Et les transexuels ??? :-k
Comme tu peux le voir, Sined avait prévu ce cas : son enum contient 3 valeurs... ;)

Posté : 31 oct. 2006, 11:44
par Sined
Et les transexuels ??? :-k
Comme tu peux le voir, Sined avait prévu ce cas : son enum contient 3 valeurs... ;)
Non il en contient 3 car si les personnes ne veulent pas remplir cette question :D
Après la question c'est le sexe et non le genre donc même les transexuels rentrent dans les catégories masculin, feminin...

Sinon je suis content, l'ambiance du forum est très bonne, on me répond vite et tout... Alors que sur d'autres forum c'est totalement différent!

Posté : 31 oct. 2006, 12:38
par mere-teresa
Enfin, il y aurait peut-être lieu d'explorer la possibilité d'utiliser le type SET, moins bloquant que le type ENUM sauf erreur de mes sens abusés ;)
Il me semble que SET prend plus de place en stockage, et surtout permet de choisir plusieurs valeurs.
ex :
SET('A', 'B', 'C') => on peut avoir A, ou A & C
ENUM('A', 'B', 'C') => A ou B ou C