Datenkomprimierung durch Base36-Codierung

7

Ich versuche, viele große Zahlen zu speichern, die beim Speichern als INTWerte abgeschnitten werden . Leider sind sie für diesen Typ zu groß.

Ich denke darüber nach, Base36- Codierung zu verwenden, um dies zu erreichen. Gibt es andere Möglichkeiten, um dieses Problem zu beheben?

Glenna Mccraw
quelle
1
Wie groß sind die Zahlen? Größer als BIGINTspeichern?
Ypercubeᵀᴹ
oh wow: p wusste nicht, dass es so etwas wie BIGINT gibt ... Ich bin immer noch ein C-Programmierer im Herzen
Glenna Mccraw

Antworten:

13

In den Base36meisten Fällen führt die Codierung zu einem Genauigkeitsverlust, da für den Basiskonvertierungsprozess Gleitkommazahlenoperationen erforderlich sind. Dies beschädigt nicht nur Ihre Daten beim Konvertieren von und nach Base36, sondern verbraucht auch mehr Speicherplatz ( INTnimmt 4 Byte in Base36Anspruch , viele -codierte Ganzzahlen in der Nähe der vorzeichenlosen 32-Bit-Integralgrenze beanspruchen mehr als dies).

In der PHP-Dokumentation finden Sie eine ausführliche Erklärung zum Genauigkeitsverlust.


Antwort : Sie sollten BIGINT für Ihre Operationen verwenden.

Daniel Li
quelle
8

Sie können entweder verwenden,

der Datentyp größer als INTGanzzahl BIGINT:

BIGINT UNSIGNED: Werte von 0bis zu 2^64-1(ungefähr 18 * 10^18)

BIGINT SIGNED: Werte von -2^63bis zu 2^63-1(ungefähr -9 * 10^18bis 9 * 10^18)

oder Festkomma- Datentyp NUMERIC(auch benannt DECIMAL):

DECIMAL(M, 0): Werte von -(10^M-1)bis zu10^M+1

Das Mkann bis zu sein 65, sodass Sie Ganzzahlen mit bis zu 65 Dezimalstellen speichern können.

ypercubeᵀᴹ
quelle