Ich muss 128-Bit-Ganzzahlen ohne Vorzeichen in MySQL speichern und habe mich gefragt, welcher Datentyp am besten geeignet ist, um so große Zahlen zu speichern.
Im Moment benutze ich binary(16)
aber das beinhaltet eine Menge Konvertierungsfunktionen pack(/huge number in hex .../)
.
Gibt es den besten Datentyp, um eine 128-Bit-Ganzzahl ohne Vorzeichen zu speichern?
Antworten:
Ich weiß nicht, wie ich es am besten aufbewahren soll - aber es gibt zumindest eine bessere Option als die Verwendung von
varchar(39)
(odervarchar(40)
wenn Sie es signieren mussten); Verwenden Sie stattdessen adecimal(39,0)
. Aus den MySQL-Dokumenten :Es ist gepackt gespeichert, nimmt also weniger Platz ein als das varchar ( 18 Bytes, wenn ich richtig rechne ), und ich hoffe, Sie können direkt damit rechnen , aber ich habe es getan Ich habe noch nie versucht, mit so einer großen Zahl zu sehen, was passiert.
quelle
Ich habe diese Frage gestellt und in all den Posts, die ich gelesen habe, nie Leistungsvergleiche gefunden. Also hier ist mein Versuch.
Ich habe die folgenden Tabellen erstellt, die mit 2.000.000 zufälligen IP-Adressen aus 100 zufälligen Netzwerken gefüllt sind.
Dann wähle ich alle IP-Adressen für jedes Netzwerk und notiere die Antwortzeit. Die durchschnittliche Antwortzeit in der Tabelle twobigints beträgt ungefähr 1 Sekunde, in der Binärtabelle ungefähr eine Hundertstelsekunde.
Hier sind die Fragen.
Durchschnittliche Antwortzeiten:
quelle
Ich glaube, die einzige andere Möglichkeit ist, es in einem
varchar(39)
Feld zu speichern .quelle