J'ai besoin de stocker des entiers non signés de 128 bits dans MySQL et je me demandais quel est le meilleur type de données pour stocker de tels grands nombres.
En ce moment, j'utilise binary(16)
mais cela implique beaucoup de fonctions de conversion pack(/huge number in hex .../)
.
Existe-t-il un meilleur type de données pour stocker un entier non signé de 128 bits?
Réponses:
Je ne sais pas quelle est la meilleure façon de le stocker - mais il y a au moins une meilleure option que d'utiliser un
varchar(39)
(ouvarchar(40)
si vous en aviez besoin signé); utilisez plutôt adecimal(39,0)
. Depuis les documents mysql :Il est stocké emballé, donc il prendra moins d'espace que le varchar ( 18 octets, si je fais bien mes calculs ), et j'espère que vous pourrez faire des calculs directement dessus, mais j'ai jamais essayé avec un si grand nombre de voir ce qui se passe.
la source
Je me suis retrouvé à poser cette question et de tous les articles que j'ai lus, je n'ai jamais trouvé de comparaison de performances. Voici donc ma tentative.
J'ai créé les tableaux suivants, remplis avec 2 000 000 d'adresses IP aléatoires provenant de 100 réseaux aléatoires.
Ensuite, je sélectionne toutes les adresses IP pour chaque réseau et enregistre le temps de réponse. Le temps de réponse moyen sur la table à deux chiffres est d'environ 1 seconde tandis que sur la table binaire, il est d'environ un centième de seconde.
Voici les requêtes.
Temps de réponse moyens:
la source
Je crois que la seule autre option est de le stocker dans un
varchar(39)
champ.la source