Champ tinyint

WRInaute passionné
Bonjour,

J'ai lu plusieurs fois qu'en réduisant la taille du champ tinyint, cela allégait la base de données et donc accélérait les requetes.

J'ai un champ qui ne comporte que des chiffres entre 0 et 9.
Je pensais qu'en mettant ce champ tinyint(1), cela allait limiter ce champ à un caractère. Mais en essayant, on peut aller jusqu'à 127... comme si la taille indiquée ne servait à rien.

Vous avez une explication ? Merci.
 
WRInaute passionné
(1) ne représente pas le nombre de caractère...
(1), c'est 1 octet soit, 8 bits, donc tu peux afficher de 0 à 127

L'informatique, c'est pas du décimal :mrgreen:
 
WRInaute passionné
Donc la taille/valeur que l'on précise ne sert strictement à rien pour ce champ tinyint !

Qu'il y ai 3 ou 1, c'est toujours pareil :p
 
WRInaute passionné
Je reprend... :roll: :lol:

Tinyint, c'est un codage sur 1 octet, donc 256 valeur, donc de 0 à 255 ou -128 à 127

Si tu met tinyint(1), tu ne prend que 1 caractère.

Donc, tu peux insérer de 0 à 9.
Mais si tu place un 15, ta base ne prendra que 5


Edit:...... Merde j'ai un doute maintenant.... Tu pouvais pas éviter de poser cette question ?
 
WRInaute discret
Le chiffre entre parenthèses après le type de champ est optionnel : si il est indiqué, il sert à spécifier une largeur d'affichage et la cadrage à gauche des valeurs de taille plus petite pour les types numériques.
Comme quand tu utilises le ZEROFILL, il utilise cette valeur pour te remplir le champ avec les 0 de gauche.
Et ce dans la limite de la taille max des valeurs (dans notre cas, 256, de 0 à 255 en non signé et de -127 à +127 en signé)

Source :
-http://dev.mysql.com/doc/refman/4.1/en/numeric-types.html
 
WRInaute passionné
Mais c'est ça mon problème, j'ai beau mettre un tinyint(1), si j'insère 10 ou 100, le nombre est pris en compte !

Alors que dans ce que j'ai lu à droite à gauche (dont dans des messages sur WRI), le tinyint(1) ne stocke qu'un seul caractère (chiffre entre 0 et 9 donc).

Mais ce que je ne comprend pas dans ce qui ce dit, c'est qu'un tinyint est le minimum que l'on puisse avoir car sa taille est d'un octet !
Donc logiquement, même, si on le limite à 1 chiffre, cela fera toujours 1 octet !

Donc ce qui se dit semble faux :)
 
WRInaute discret
Comme précisé sur le site MySQL, cet argument optionnel ne sert que dans le cas où la valeur stockée est inférieur ou égale en nombre de caractères.
Donc la valeur 1 pour TINYINT(3) ZEROFILL
est : 001
La valeur 10 est 010, 100 est 100 etc etc (jusqu'à 127 ou 255 dans ce cas)
 
Haut