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

TL;DR — Sayınız DynamoDB'nin sınırlarının dışında. N türü, yaklaşık 1E-130 ile 9.9999…E+125 arasında bir büyüklükle 38 basamağa kadar hassasiyet tutar. Bu aralığın ötesindeki bir değer — ya da 38'den fazla anlamlı basamağı olan bir değer — bir istisnayla reddedilir. Büyük ID'leri ve yüksek hassasiyetli değerleri sayı değil, string olarak saklayın.

Ne anlama gelir

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

DynamoDB'nin Number türü, sınırlı bir aralığa ve 38 anlamlı basamağa sahip bir ondalıktır. Bu ValidationException (HTTP 400), gönderdiğiniz değerin o büyüklüğü aştığı — ya da bir dil çalışma zamanının uzun bir sayısal dizeyi aralığı aşan bir kayan noktalı sayıya dönüştürdüğü anlamına gelir. Bir sayı olarak yeniden denenebilir değildir; değer farklı temsil edilmelidir.

Neden olur

  • Gerçekten devasa bir sayı — ~9.9E+125'ten büyük (ya da büyüklüğü 1E-130'dan küçük pozitif) bir değer.
  • Bir float'a ayrıştırılmış uzun bir sayısal dize — örneğin Number() / parseFloat()'tan geçirilmiş 120 basamaklı bir hesap/referans numarası 8.04e+126 gibi bir şey olur ve aralığı aşar. Bu, sık karşılaşılan gerçek dünya tetikleyicisidir.
  • 38'den fazla anlamlı basamak — DynamoDB'nin Number türü 38 basamağa kadar hassasiyet tutar ve onu aşmak bir istisnayla sonuçlanır.
  • Aralığı aşacak kadar büyüyen hesaplanmış bir değer (bir çarpım, bir üs alma).

Nasıl düzeltilir

  1. Onu sayı değil, string (S) olarak saklayın. Üzerinde asla matematik yapmadığınız büyük tanımlayıcılar, hesap numaraları ya da hash'ler string olmalıdır — bu, hem büyüklük sınırını hem de 38 basamaklı hassasiyet sınırını atlar.
  2. ID benzeri dizeleri sayılara ayrıştırmayın — 100 basamaklı bir referansı baştan sona string olarak tutun. Onu bir float'a ayrıştırmak, taşmayı üreten şeydir.
  3. Sayısal öznitelikleri aralık içinde tutun — DynamoDB Number, 38 basamağa kadar hassasiyeti ve ~9.9E+125'e kadar büyüklüğü destekler. Değerleri sığacak şekilde tasarlayın ya da bölün/ölçeklendirin.
  4. Yüksek hassasiyetli ondalıklar için, sayıları ondalık türünüzden (Python Decimal, bir big-decimal kitaplığı) dönüştürdüğünüz dizeler olarak iletin, böylece hassasiyet DynamoDB'ye ulaşmadan önce kaybolmasın.
  5. String olarak saklayarak baştaki sıfırları / kesinliği koruyun — Number türü normalleştirir ve zaten baştaki sıfırları koruyamaz.

SSS

DynamoDB'nin sayı sınırları nelerdir? Number türü, 38 basamağa kadar hassasiyeti ve yaklaşık 1E-130 ile 9.9999999999999999999999999999999999999E+125 (pozitif) ve bunların negatiflerini destekler. Bu aralığın dışındaki bir değer "Number overflow." fırlatır.

DynamoDB'de çok büyük bir sayıyı nasıl saklarım? Üzerinde aritmetik yapmıyorsanız onu bir Number (N) yerine bir string (S) özniteliği olarak saklayın — bu, 38 basamaklı hassasiyet sınırını ve büyüklük sınırını tamamen önler. Sıralanabilir sayısal dizeler için, sözcüksel sıra sayısal sırayla eşleşsin diye onları sıfırla doldurun.

İlgili hatalar

Kaynaklar

En son 2026-07-13 tarihinde yukarıda bağlantısı verilen resmi AWS belgelerine karşı doğrulandı.

Console olmadan DynamoDB ile çalış

DynamoDB’nin çalıştıramadığı gerçek SQL’i çalıştıran hızlı bir DynamoDB masaüstü istemcisi — JOINs, GROUP BY, toplamalar — görsel düzenleme ve kendi Bedrock anahtarların üzerinde bir yapay zekâ aracısıyla.

30 günlük ücretsiz deneme, kredi kartı yok — ardından süre sınırı olmayan Ücretsiz plan.