Number overflow. Attempting to store a number with magnitude larger than supported range
TL;DR — Deine Zahl liegt außerhalb der Limits von DynamoDB. Der N-Typ hält bis zu 38 Stellen Genauigkeit mit einer Größenordnung zwischen etwa 1E-130 und 9.9999…E+125. Ein Wert jenseits dieses Bereichs — oder einer mit mehr als 38 signifikanten Stellen — wird mit einer Exception abgelehnt. Speichere große IDs und hochpräzise Werte als Zeichenketten, nicht als Zahlen.
Was es bedeutet
ValidationException: 1 validation error detected: Number overflow. Attempting to store a number with magnitude larger than supported rangeDer Number-Typ von DynamoDB ist eine Dezimalzahl mit begrenztem Bereich und 38 signifikanten Stellen. Diese ValidationException (HTTP 400) bedeutet, dass der von dir gesendete Wert diese Größenordnung überschreitet — oder eine Sprachlaufzeit eine lange numerische Zeichenkette in eine Fließkommazahl verwandelt hat, die den Bereich überlaufen ließ. Er ist nicht wiederholbar als Zahl; der Wert muss anders dargestellt werden.
Warum es passiert
- Eine tatsächlich riesige Zahl — ein Wert größer als ~
9.9E+125(oder ein positiver Wert mit kleinerer Größenordnung als1E-130). - Eine lange numerische Zeichenkette, die zu einem Float geparst wurde — z. B. wird eine 120-stellige Konto-/Referenznummer, die durch
Number()/parseFloat()läuft, zu etwas wie8.04e+126und läuft über. Das ist ein häufiger realer Auslöser. - Mehr als 38 signifikante Stellen — der Number-Typ von DynamoDB hält bis zu 38 Stellen Genauigkeit, und diese zu überschreiten führt zu einer Exception.
- Ein berechneter Wert (ein Produkt, eine Potenzierung), der über den Bereich hinausgewachsen ist.
So behebst du es
- Speichere ihn als Zeichenkette (
S), nicht als Zahl. Große Bezeichner, Kontonummern oder Hashes, mit denen du nie rechnest, sollten Zeichenketten sein — das umgeht sowohl das Größenordnungslimit als auch die 38-Stellen-Genauigkeitsgrenze. - Parse ID-artige Zeichenketten nicht zu Zahlen — behalte eine 100-stellige Referenz durchgehend als Zeichenkette. Sie zu einem Float zu parsen ist genau das, was den Overflow erzeugt.
- Halte numerische Attribute innerhalb des Bereichs — DynamoDB Number unterstützt bis zu 38 Stellen Genauigkeit und eine Größenordnung bis ~
9.9E+125. Gestalte Werte so, dass sie hineinpassen, oder teile/skaliere sie. - Übergib bei hochpräzisen Dezimalzahlen die Zahlen als Zeichenketten, die du aus deinem Dezimaltyp konvertierst (Python
Decimal, eine Big-Decimal-Bibliothek), damit keine Genauigkeit verloren geht, bevor sie DynamoDB erreicht. - Bewahre führende Nullen / Exaktheit, indem du als Zeichenkette speicherst — der Number-Typ normalisiert und kann führende Nullen ohnehin nicht behalten.
FAQ
Was sind die Zahlenlimits von DynamoDB? Der Number-Typ unterstützt bis zu 38 Stellen Genauigkeit und eine Größenordnung von etwa 1E-130 bis 9.9999999999999999999999999999999999999E+125 (positiv) und die Negativen davon. Ein Wert außerhalb dieses Bereichs löst "Number overflow" aus.
Wie speichere ich eine sehr große Zahl in DynamoDB? Speichere sie als Zeichenketten-Attribut (S) statt als Number (N), wenn du keine Arithmetik damit ausführst — das vermeidet die 38-Stellen-Genauigkeitsgrenze und das Größenordnungslimit vollständig. Für sortierbare numerische Zeichenketten fülle sie mit Nullen auf, damit die lexikalische Reihenfolge der numerischen entspricht.
Verwandte Fehler
- Float types are not supported. Use Decimal types instead — das boto3-Präzisionsgegenstück.
- One or more parameter values were invalid — die breitere Familie der Wertvalidierung.
- Learn: DynamoDB-Datentypen · Sort-Keys mit Nullen auffüllen
Referenzen
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- AttributeValue — Amazon DynamoDB API Reference
Zuletzt verifiziert am 2026-07-13 gegen die oben verlinkte offizielle AWS-Dokumentation.