web-dev-qa-db-fra.com

Existe-t-il une différence entre utiliser INT (1) et TINYINT (1) dans MySQL?

Je suppose que INT (1) est exactement la même chose que TINYINT (1) mais je n’en ai aucune idée. Chaque fois que j'ai eu des valeurs qui ne peuvent être qu'un seul entier (par exemple une valeur de 0 à 9), j'ai toujours juste utilisé INT (1) pour dire que c'est un entier et que ce ne sera qu'un caractère, ce qui, je suppose, signifie que il ne peut s'agir que d'une valeur comprise entre 0 et 9 (expliquez-moi si je me trompe). J'ai toujours simplement ignoré les autres types d'INT que vous pouvez utiliser comme nombres. Je ne suis pas averti de MySQL et j'ai tendance à éviter les choses plus compliquées que vous pouvez faire avec.

Alors ma question, y at-il une différence entre les différents types entiers INT, TINYINT, SMALLINT, MEDIUMINT et BIGINT si vous définissez une longueur de 1 pour chaque type ;? Si non, devrais-je les utiliser quand même (je peux voir les utiliser pour un sens plus sémantique, TINYINT étant plus spécifique que juste INT)? Si oui, pourrais-je facilement (et/ou devrais-je) simplement parcourir ma base de données et remplacer tous mes champs INT (1) par des champs TINYINT (1)?

38
animuson

Le nombre entre parenthèses pour les types de colonnes de nombres entiers correspond à la "largeur d'affichage". Cela n'affecte pas les exigences de stockage car elles sont prédéfinies.

Lectures complémentaires

36
Phil

Ici, vous comprendrez mieux!

tinyint: 1 byte, -128 to +127 / 0 to 255 (unsigned)
smallint: 2 bytes, -32,768 to +32,767 / 0 to 65,535 (unsigned)
mediumint: 3 bytes, -8,388,608 to 8,388,607 / 0 to 16,777,215 (unsigned)
int/integer: 4 bytes, -2,147,483,648 to +2,147,483,647 / 0 to 4,294,967,295 (unsigned)
bigint: 8 bytes, -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 / 0 to 18,446,744,073,709,551,615 (unsigned)
44
Cody

Comme l'explique la réponse acceptée:

Le nombre entre parenthèses indique le nombre de caractères à afficher pour ce champ} _, pas la taille de stockage du champ.

Mais si vous voulez connaître la taille de stockage, vérifiez les documents source MySQL.

Source: MySQL Docs: types entiers (valeur exacte) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT

TINYINT: 1 octet, -128 à 127 signés, 0 à 255 non signés

SMALLINT: 2 octets, -32768 à 32767 signés, 0 à 65535 non signés

MEDIUMINT: 3 octets, -8388608 à 8388607 signé, 0 à 16777215 non signé

INT: 4 octets, -2147483648 à 2147483647 signés, 0 à 4294967295 non signés

BIGINT: 8 octets, -2 ^ 63 à 2 ^ 63-1 signé, 0 à 2 ^ 64-1 non signé

0
HoldOffHunger