Champ tinyint

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Robinson, 11 Mai 2006.

  1. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 641
    J'aime reçus:
    0
    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.
     
  2. Grantome
    Grantome WRInaute passionné
    Inscrit:
    16 Janvier 2004
    Messages:
    2 251
    J'aime reçus:
    0
    (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:
     
  3. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 641
    J'aime reçus:
    0
    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
     
  4. Grantome
    Grantome WRInaute passionné
    Inscrit:
    16 Janvier 2004
    Messages:
    2 251
    J'aime reçus:
    0
    ...j'ai dit une connerie...
     
  5. Grantome
    Grantome WRInaute passionné
    Inscrit:
    16 Janvier 2004
    Messages:
    2 251
    J'aime reçus:
    0
    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 ?
     
  6. Pharmespace
    Pharmespace WRInaute discret
    Inscrit:
    30 Septembre 2003
    Messages:
    62
    J'aime reçus:
    0
    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
     
  7. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 641
    J'aime reçus:
    0
    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 :)
     
  8. Pharmespace
    Pharmespace WRInaute discret
    Inscrit:
    30 Septembre 2003
    Messages:
    62
    J'aime reçus:
    0
    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)
     
  9. Robinson
    Robinson WRInaute passionné
    Inscrit:
    26 Octobre 2005
    Messages:
    1 641
    J'aime reçus:
    0
    Merci pour cette précision (je ne vais donc pas modifier toutes mes tables)
     
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice