Que faire quand vous avez besoin d'entiers de plus de 20 chiffres sur mysql?
Semble BIGINT
est le plus grand entier disponible sur MySQL, droit?
Que faire quand vous avez besoin de stocker un BIGINT(80) par exemple?
Pourquoi, dans certains cas, comme quelque part dans l'API Twitter docs, ils nous recommandent à stocker ces grands nombres entiers comme varchar
?
Qui est la vraie raison derrière le choix d'un type plutôt qu'un autre?
BIGINT est limitée par définition à 8 octets.
OriginalL'auteur Keyne | 2011-08-22
Vous devez vous connecter pour publier un commentaire.
Grands entiers ne sont pas réellement limité à 20 chiffres, ils sont limités à l'un des numéros qui peuvent être exprimés en 64 bits (par exemple, le nombre
99,999,999,999,999,999,999
n'est pas valide d'un grand nombre entier, bien qu'il soit à 20 chiffres).La raison de cette limitation est que le format natif des entiers peuvent être manipulés de façon relativement rapide par le matériel sous-jacent alors que des versions textuelles d'un nombre (de tendance), doivent être traitées d'un chiffre à la fois.
Si vous voulez un nombre plus grand que le plus grand 64 bits entier non signé
18,446,744,073,709,551,615
alors vous aurez besoin de le stocker en tant quevarchar
(ou d'un autre champ de texte) et j'espère que vous n'avez pas besoin de faire beaucoup de mathématiques de manipulation.Alternativement, vous pouvez regarder dans les nombres à virgule flottante qui ont une plus grande portée, mais moins de précision, ou des nombres décimaux qui devrait être en mesure de vous donner de 65 chiffres pour une valeur intégrale, avec
decimal(65,0)
comme le type de la colonne.ORDER
etWHERE
déclarations? (Avec correctement réglé index). Par exempleSELECT column1 FROM tableA WHERE mybigint > N ORDER BY date LIMIT 100000
. Dans ce cas, utilisée pour paginer les résultats.les valeurs décimales travaillera d'accord pour cela, mais sera probablement plus lent que raw types intégraux. La hiérarchie de la vitesse sera probablement les différentes premières intégrales, nombres décimaux, zéro justifiée varchars et injustifiée varchars (plus rapide au plus lent) mais vous ne devriez pas faire confiance aux conseils de certains yobbo sur le net, même de moi 🙂 Mesure, n'essayez pas de deviner. Utilisez ensuite la manière la plus rapide qui offre la gamme dont vous avez besoin. Plus précisément, si vous avez besoin de 80 chiffres, l'utilisation justifiée varchars (alors que 42 est stockée en tant que
0000000000...000000042
par exemple). ...... Pour les 25 chiffres, probablement décimal(25,0). Pour les 19 chiffres, de type bigint. Et ainsi de suite. Votre schéma n'est pas fermée à jamais. Si, à un certain moment, vous avez besoin de passer de 19 à 25 chiffres, ensuite vous apporter les changements à ce point de bigint à virgule, sinon le YAGNI principe s'applique probablement.
OriginalL'auteur paxdiablo
Vous pouvez spécifier un
numeric(65,0)
, mais si vous avez besoin de plus, vous aurez besoin d'un varchar.La raison pour sélectionner l'un sur l'autre est de l'utilisation, de l'efficacité et de l'espace. À l'aide d'un int est plus efficace qu'un bigint ou, je crois, numérique Si vous avez besoin de faire des maths.
OriginalL'auteur Doug Kress
Vous pouvez la stocker de grands entiers comme un arbitraire chaîne binaire si vous souhaitez le maximum de l'efficacité du stockage.
Mais je ne sais pas si ça vaut le coup parce que vous aurez à traiter avec plus de 64 bits entiers dans votre application, ce qui est également pas la chose que vous voulez faire sans une bonne raison.
Mieux garder les choses simples et
varchar
.OriginalL'auteur sanmai
BIGINT est limitée par définition à 8 chiffres. Le nombre maximum de chiffres en DÉCIMAL type est de 64. Vous devez utiliser VARCHAR pour stocker des valeurs de plus de précision et de savoir qu'il n'existe aucun lien direct de mathématiques de telles valeurs.
OriginalL'auteur mozillanerd