ENUM ou TINYINT ?

Eléphanteau du PHP | 45 Messages

30 oct. 2006, 15:42

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

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

30 oct. 2006, 16:26

Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 45 Messages

30 oct. 2006, 16:36

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

ViPHP
ViPHP | 1961 Messages

30 oct. 2006, 16:46

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.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 514 Messages

30 oct. 2006, 16:47

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.
Ne jamais repousser à demain ce qu'on peut faire après demain ...

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

30 oct. 2006, 18:50

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.
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

ViPHP
ViPHP | 1961 Messages

30 oct. 2006, 19:53

Re,

Je crois que le 'TINYINT' peut prendre 256 valeurs (de -128 à +127)
et un 'UNSIGNED TINYINT' de 0 à +255
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

30 oct. 2006, 20:28

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...
](*,)

ViPHP
ViPHP | 1961 Messages

30 oct. 2006, 20:31

Re,
Et les transexuels ??? :-k
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Mammouth du PHP | 19672 Messages

30 oct. 2006, 20:41

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 ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 45 Messages

31 oct. 2006, 01:06

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)
Modifié en dernier par Sined le 31 oct. 2006, 01:10, modifié 1 fois.

ViPHP
ViPHP | 1961 Messages

31 oct. 2006, 01:09

Re,
Et les transexuels ??? :-k
C'estait pour la blague!
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

31 oct. 2006, 09:28

Et les transexuels ??? :-k
Comme tu peux le voir, Sined avait prévu ce cas : son enum contient 3 valeurs... ;)

Eléphanteau du PHP | 45 Messages

31 oct. 2006, 11:44

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!

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

31 oct. 2006, 12:38

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
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.