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

TL;DR — 你的數字超出 DynamoDB 的限制。N 型別存放最多 38 位數精度,量級介於大約 1E-1309.9999…E+125 之間。超出該範圍的值 — 或超過 38 個有效數字的值 — 會以例外被拒絕。將大型 ID 與高精度值儲存為字串,而非數字。

這是什麼意思

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

DynamoDB 的 Number 型別是一個有界範圍與 38 個有效數字的小數。這個 ValidationException(HTTP 400)表示你送出的值超過該量級 — 或某個語言執行環境把一個長數字字串轉成了溢出範圍的浮點數。它作為數字不可重試;該值必須以不同方式表示。

為什麼會發生

  • 確實龐大的數字 — 大於約 9.9E+125 的值(或量級小於 1E-130 的正值)。
  • 長數字字串被解析為 float — 例如一個 120 位數的帳號/參考號碼經 Number() / parseFloat() 變成類似 8.04e+126 的東西並溢出。這是常見的真實觸發原因。
  • 超過 38 個有效數字 — DynamoDB 的 Number 型別存放最多 38 位數精度,超過會導致例外。
  • 計算出的值(乘積、指數)成長超過範圍。

如何修正

  1. 將它儲存為字串(S),而非數字。 你從不做算術的大型識別碼、帳號或雜湊應該是字串 — 這同時避開量級限制與 38 位數精度上限。
  2. 不要將 ID 式的字串解析為數字 — 將 100 位數的參考號碼端到端保持為字串。將它解析為 float 正是產生溢出的原因。
  3. 讓數值屬性保持在範圍內 — DynamoDB Number 支援最多 38 位數精度與最高約 9.9E+125 的量級。設計值以符合,或拆分/縮放它們。
  4. 對高精度小數,將數字作為你從小數型別(Python Decimal、big-decimal 程式庫)轉換的字串傳入,讓精度在抵達 DynamoDB 前不會遺失。
  5. 以字串儲存以保留前導零/精確性 — Number 型別會正規化,且無論如何都無法保留前導零。

常見問題

DynamoDB 的數字限制是什麼? Number 型別支援最多 38 位數精度,量級從約 1E-130 到 9.9999999999999999999999999999999999999E+125(正值)以及那些的負值。超出該範圍的值會引發「Number overflow.」。

我要如何在 DynamoDB 中儲存非常大的數字? 若你不對它做算術,將它儲存為字串(S)屬性而非 Number(N)— 這完全避開 38 位數精度上限與量級限制。對可排序的數字字串,將它們零填充,讓字典順序與數字順序相符。

相關錯誤

參考資料

最後驗證於 2026-07-13,對照上方連結的 AWS 官方文件。

不必透過主控台就能操作 DynamoDB

一款快速的 DynamoDB 桌面用戶端,可執行 DynamoDB 無法執行的真正 SQL — JOINs、GROUP BY、聚合 — 並支援視覺化編輯與使用你自己的 Bedrock 金鑰的 AI 代理。

30 天免費試用,無需信用卡 — 之後為無時間限制的免費方案。