Number overflow. Attempting to store a number with magnitude larger than supported range

En bref — Ton nombre est en dehors des limites de DynamoDB. Le type N contient jusqu'à 38 chiffres de précision avec une magnitude comprise entre environ 1E-130 et 9,9999…E+125. Une valeur au-delà de cette plage — ou comportant plus de 38 chiffres significatifs — est rejetée avec une exception. Stocke les grands identifiants et les valeurs de haute précision sous forme de chaînes, pas de nombres.

Ce que ça signifie

ValidationException: 1 validation error detected: Number overflow. Attempting to store a number with magnitude larger than supported range

Le type Number de DynamoDB est un décimal avec une plage bornée et 38 chiffres significatifs. Cette ValidationException (HTTP 400) signifie que la valeur que tu as envoyée dépasse cette magnitude — ou qu'un runtime de langage a transformé une longue chaîne numérique en un nombre à virgule flottante qui a débordé la plage. Elle n'est pas réessayable en tant que nombre ; la valeur doit être représentée autrement.

Pourquoi ça arrive

  • Un nombre réellement énorme — une valeur supérieure à ~9,9E+125 (ou une valeur positive de magnitude inférieure à 1E-130).
  • Une longue chaîne numérique convertie en flottant — par ex. un numéro de compte/référence de 120 chiffres passé dans Number() / parseFloat() devient quelque chose comme 8.04e+126 et déborde. C'est un déclencheur fréquent dans la pratique.
  • Plus de 38 chiffres significatifs — le type Number de DynamoDB contient jusqu'à 38 chiffres de précision, et dépasser cela produit une exception.
  • Une valeur calculée (un produit, une exponentiation) qui a grossi au-delà de la plage.

Comment le corriger

  1. Stocke-la comme une chaîne (S), pas un nombre. Les grands identifiants, numéros de compte ou hachages sur lesquels tu ne fais jamais de calcul devraient être des chaînes — cela contourne à la fois la limite de magnitude et le plafond de 38 chiffres de précision.
  2. Ne convertis pas en nombres des chaînes de type identifiant — garde une référence de 100 chiffres comme chaîne de bout en bout. La convertir en flottant est ce qui produit le débordement.
  3. Garde les attributs numériques dans la plage — le type Number de DynamoDB prend en charge jusqu'à 38 chiffres de précision et une magnitude jusqu'à ~9,9E+125. Conçois les valeurs pour qu'elles tiennent, ou scinde-les/mets-les à l'échelle.
  4. Pour les décimaux de haute précision, passe les nombres sous forme de chaînes que tu convertis depuis ton type décimal (Decimal en Python, une bibliothèque big-decimal) pour que la précision ne soit pas perdue avant d'atteindre DynamoDB.
  5. Préserve les zéros de tête / l'exactitude en stockant sous forme de chaîne — le type Number normalise et ne peut de toute façon pas conserver les zéros de tête.

FAQ

Quelles sont les limites des nombres dans DynamoDB ? Le type Number prend en charge jusqu'à 38 chiffres de précision et une magnitude comprise entre environ 1E-130 et 9.9999999999999999999999999999999999999E+125 (positive) et les négatifs de celles-ci. Une valeur en dehors de cette plage lève « Number overflow. »

Comment stocker un très grand nombre dans DynamoDB ? Stocke-le comme un attribut chaîne (S) plutôt qu'un Number (N) si tu ne fais pas d'arithmétique dessus — cela évite entièrement le plafond de 38 chiffres de précision et la limite de magnitude. Pour des chaînes numériques triables, complète-les par des zéros pour que l'ordre lexical corresponde à l'ordre numérique.

Erreurs liées

Références

Dernière vérification le 2026-07-13 par rapport à la documentation officielle AWS liée ci-dessus.

Travaille avec DynamoDB sans la Console

Un client de bureau rapide pour DynamoDB qui exécute le vrai SQL que DynamoDB ne peut pas — JOINs, GROUP BY, agrégations — avec édition visuelle et un agent IA sur tes propres clés Bedrock.

Essai gratuit de 30 jours, sans carte bancaire — ensuite la formule Gratuit, sans limite de durée.