Number overflow. Attempting to store a number with magnitude larger than supported range
TL;DR — 你的數字超出 DynamoDB 的限制。N 型別存放最多 38 位數精度,量級介於大約 1E-130 與 9.9999…E+125 之間。超出該範圍的值 — 或超過 38 個有效數字的值 — 會以例外被拒絕。將大型 ID 與高精度值儲存為字串,而非數字。
這是什麼意思
ValidationException: 1 validation error detected: Number overflow. Attempting to store a number with magnitude larger than supported rangeDynamoDB 的 Number 型別是一個有界範圍與 38 個有效數字的小數。這個 ValidationException(HTTP 400)表示你送出的值超過該量級 — 或某個語言執行環境把一個長數字字串轉成了溢出範圍的浮點數。它作為數字不可重試;該值必須以不同方式表示。
為什麼會發生
- 確實龐大的數字 — 大於約
9.9E+125的值(或量級小於1E-130的正值)。 - 長數字字串被解析為 float — 例如一個 120 位數的帳號/參考號碼經
Number()/parseFloat()變成類似8.04e+126的東西並溢出。這是常見的真實觸發原因。 - 超過 38 個有效數字 — DynamoDB 的 Number 型別存放最多 38 位數精度,超過會導致例外。
- 計算出的值(乘積、指數)成長超過範圍。
如何修正
- 將它儲存為字串(
S),而非數字。 你從不做算術的大型識別碼、帳號或雜湊應該是字串 — 這同時避開量級限制與 38 位數精度上限。 - 不要將 ID 式的字串解析為數字 — 將 100 位數的參考號碼端到端保持為字串。將它解析為 float 正是產生溢出的原因。
- 讓數值屬性保持在範圍內 — DynamoDB Number 支援最多 38 位數精度與最高約
9.9E+125的量級。設計值以符合,或拆分/縮放它們。 - 對高精度小數,將數字作為你從小數型別(Python
Decimal、big-decimal 程式庫)轉換的字串傳入,讓精度在抵達 DynamoDB 前不會遺失。 - 以字串儲存以保留前導零/精確性 — Number 型別會正規化,且無論如何都無法保留前導零。
常見問題
DynamoDB 的數字限制是什麼? Number 型別支援最多 38 位數精度,量級從約 1E-130 到 9.9999999999999999999999999999999999999E+125(正值)以及那些的負值。超出該範圍的值會引發「Number overflow.」。
我要如何在 DynamoDB 中儲存非常大的數字? 若你不對它做算術,將它儲存為字串(S)屬性而非 Number(N)— 這完全避開 38 位數精度上限與量級限制。對可排序的數字字串,將它們零填充,讓字典順序與數字順序相符。
相關錯誤
- Float types are not supported. Use Decimal types instead — boto3 的精度對應項。
- One or more parameter values were invalid — 更廣泛的值驗證家族。
- 學習:DynamoDB data types · Zero-padding sort keys
參考資料
- 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
最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。