Ich versuche, viele große Zahlen zu speichern, die beim Speichern als INT
Werte 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?
mysql
database-design
optimization
Glenna Mccraw
quelle
quelle
BIGINT
speichern?Antworten:
In den
Base36
meisten 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 nachBase36
, sondern verbraucht auch mehr Speicherplatz (INT
nimmt 4 Byte inBase36
Anspruch , 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.
quelle
Sie können entweder verwenden,
der Datentyp größer als
INT
GanzzahlBIGINT
:BIGINT UNSIGNED
: Werte von0
bis zu2^64-1
(ungefähr18 * 10^18
)BIGINT SIGNED
: Werte von-2^63
bis zu2^63-1
(ungefähr-9 * 10^18
bis9 * 10^18
)oder Festkomma- Datentyp
NUMERIC
(auch benanntDECIMAL
):DECIMAL(M, 0)
: Werte von-(10^M-1)
bis zu10^M+1
Das
M
kann bis zu sein65
, sodass Sie Ganzzahlen mit bis zu 65 Dezimalstellen speichern können.quelle