Number overflow. Attempting to store a number with magnitude larger than supported range
In breve — Il tuo numero è al di fuori dei limiti di DynamoDB. Il tipo N contiene fino a 38 cifre di precisione con una grandezza tra circa 1E-130 e 9.9999…E+125. Un valore oltre quell'intervallo — o uno con più di 38 cifre significative — viene rifiutato con un'eccezione. Memorizza ID grandi e valori ad alta precisione come stringhe, non come numeri.
Cosa significa
ValidationException: 1 validation error detected: Number overflow. Attempting to store a number with magnitude larger than supported rangeIl tipo Number di DynamoDB è un decimale con un intervallo delimitato e 38 cifre significative. Questa ValidationException (HTTP 400) significa che il valore che hai inviato supera quella grandezza — o un runtime di linguaggio ha trasformato una lunga stringa numerica in un numero a virgola mobile che ha superato l'intervallo. Non è ripetibile come numero; il valore deve essere rappresentato diversamente.
Perché succede
- Un numero genuinamente enorme — un valore più grande di ~
9.9E+125(o un valore positivo di grandezza inferiore a1E-130). - Una lunga stringa numerica analizzata in un float — es. un numero di conto/riferimento di 120 cifre passato attraverso
Number()/parseFloat()diventa qualcosa come8.04e+126e supera l'intervallo. Questo è un trigger frequente nella pratica. - Più di 38 cifre significative — il tipo Number di DynamoDB contiene fino a 38 cifre di precisione, e superarlo genera un'eccezione.
- Un valore calcolato (un prodotto, un'esponenziazione) che è cresciuto oltre l'intervallo.
Come risolverlo
- Memorizzalo come stringa (
S), non come numero. Grandi identificatori, numeri di conto o hash su cui non fai mai operazioni matematiche dovrebbero essere stringhe — questo aggira sia il limite di grandezza sia il tetto di precisione di 38 cifre. - Non analizzare stringhe simili a ID in numeri — mantieni un riferimento di 100 cifre come stringa end-to-end. Analizzarlo in un float è ciò che produce l'overflow.
- Mantieni gli attributi numerici dentro l'intervallo — il Number di DynamoDB supporta fino a 38 cifre di precisione e una grandezza fino a ~
9.9E+125. Progetta i valori perché rientrino, o suddividili/scalali. - Per i decimali ad alta precisione, passa i numeri come stringhe che converti dal tuo tipo decimale (
Decimaldi Python, una libreria big-decimal) così la precisione non venga persa prima di raggiungere DynamoDB. - Preserva gli zeri iniziali / l'esattezza memorizzando come stringa — il tipo Number normalizza e comunque non può mantenere gli zeri iniziali.
FAQ
Quali sono i limiti dei numeri di DynamoDB? Il tipo Number supporta fino a 38 cifre di precisione e una grandezza da circa 1E-130 a 9.9999999999999999999999999999999999999E+125 (positivo) e i negativi di questi. Un valore al di fuori di quell'intervallo genera "Number overflow."
Come memorizzo un numero molto grande in DynamoDB? Memorizzalo come attributo stringa (S) invece che come Number (N) se non ci fai operazioni aritmetiche — questo evita del tutto il tetto di precisione di 38 cifre e il limite di grandezza. Per stringhe numeriche ordinabili, aggiungi zeri iniziali così l'ordine lessicale corrisponda all'ordine numerico.
Errori correlati
- Float types are not supported. Use Decimal types instead — la controparte di precisione di boto3.
- One or more parameter values were invalid — la famiglia più ampia di validazione dei valori.
- Impara: DynamoDB data types · Zero-padding sort keys
Riferimenti
- 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
Ultima verifica 2026-07-13 rispetto alla documentazione ufficiale AWS collegata sopra.