44 votes

BIGINT(8) est-il le plus grand nombre entier que MySQL peut stocker ?

J'ai quelques chiffres qui sont maintenant plus grands que INT peut gérer.

C'est un peu embarrassant, mais honnêtement, je ne sais pas exactement ce que le BIGINT(8) signifie. Le chiffre 8 correspond-il à la valeur maximale du bit ou à la longueur maximale ?

Donc BIGINT(1) ne peut être qu'un seul chiffre ? Ou est-ce que BIGINT(1) autre chose ? Je pense que TINYINT(1) Le maximum est de 127, qu'en est-il ?

  • Quelle est la plus grande taille que je puisse faire ? BIGINT ?
  • Quel est le plus grand nombre que je peux stocker dans MySQL sous la forme d'un entier ?

0 votes

5 réponses dans la même minute, avec presque les mêmes conclusions :)

1 votes

Oui, j'ai upvoté tout le monde puisque je ne peux choisir qu'une seule réponse :)

44voto

Greg Points 132247

Le nombre représente la manière dont les données sont affichées - il n'affecte pas la manière dont elles sont stockées.

De le manuel :

Une autre extension est prise en charge par MySQL pour spécifier facultativement la largeur d'affichage des types de données entières entre parenthèses après le mot-clé de base du type (par exemple, INT(4)). Cette largeur d'affichage optionnelle peut être utilisée par des applications pour afficher des valeurs entières ayant une largeur inférieure à la largeur spécifiée pour la colonne en les plaçant à gauche avec des espaces. (C'est-à-dire que cette largeur est présente dans les métadonnées renvoyées avec les ensembles de résultats. C'est à l'application de décider si elle est utilisée ou non).

La largeur d'affichage ne limite pas la plage de valeurs pouvant être stockées dans la colonne, ni le nombre de chiffres affichés pour les valeurs dont la largeur dépasse celle spécifiée pour la colonne. Par exemple, une colonne spécifiée comme SMALLINT(3) a la plage SMALLINT habituelle de -32768 à 32767, et les valeurs en dehors de la plage autorisée par trois caractères sont affichées en utilisant plus de trois caractères.

Un BIGINT est toujours composé de 8 octets et peut stocker de -9223372036854775808 à 9223372036854775807 (signé) ou de 0 à 18446744073709551615 (non signé).

12voto

Abel Points 24335

La réponse se trouve dans cette vue d'ensemble . Un BIGINT représente en effet 8 octets. Un TinyInt n'en fait que 1.

Par ailleurs, je ne considère pas la fourchette de -9223372036854775808 a 9223372036854775807 très gênant, c'est +/-2^63 :).

5voto

soulmerge Points 37314

Le nombre définit simplement la largeur du nombre lorsqu'il est affiché. Jetez un coup d'œil au manuel mysql pour la rubrique les tailles des types numériques .

5voto

Andre Miller Points 6713

Le nombre entre parenthèses est le largeur d'affichage et n'est pas lié à la plage de nombres que le type de données peut réellement stocker.

Dans MySQL, le champ BIGINT Le type de données numériques nécessite 8 octets pour le stockage et possède les plages suivantes :

  • En signé est comprise entre -9223372036854775808 et 9223372036854775807 (c'est-à-dire entre -2 63 à 2 63-1 ).
  • En non signé est comprise entre 0 et 18446744073709551615 (c'est-à-dire entre 0 et 2 64-1 ).

Vous trouverez plus d'informations ici : Types de données numériques MySQL .

3voto

Pour stocker un entier de 128 bits, vous pouvez utiliser un BINARY(16).

Pour 252 :

SELECT RIGHT(CONCAT(REPEAT(" \0 ",16),UNHEX(CONV(252,10,16))),16);

ou de manière équivalente :

SELECT UNHEX(RIGHT(CONCAT(REPEAT("0",32),HEX(252)),32)) ;

(mais les calculs d'entiers de MySQL sont en 64 bits)

Voir également les fonctions IPv6 récentes INET6_ATON() et INET6_NTOA(), http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_inet6-aton et comment ils utilisent un VARBINAIRE(16).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X