DynamoDB 能存 null 值嗎?
可以。DynamoDB 有一個專門的 NULL 型別,用來表示一個處於未知或未定義狀態的屬性。它還允許非鍵屬性使用空字串和空二進位制值,以及空列表和空對映。它不允許空集合(字串、數字或二進位制集合),那會被 ValidationException 拒絕。
NULL 型別
NULL 是一個真實的屬性型別,寫作 {"NULL": true}。當你想記錄"這個欄位存在但沒有值"時用它——這與乾脆省略該屬性是不同的。
哪些空值是允許的
- 空字串 / 空二進位制——在非鍵屬性上允許,在列表和對映內部也允許。
- 空列表 / 空對映——允許。
哪些是不允許的
- 空集合(SS、NS、BS)——會被
ValidationException拒絕。 - 鍵屬性上的空字串或空二進位制——鍵值的長度必須大於零。
這些拒絕長什麼樣
一次 PutItem 在同一個項目裡接受了 {"NULL": true}、{"S": ""}、{"L": []}、{"M": {}} 和一個零位元組的 {"B": ""},而 GetItem 把這五個原封不動地返回了。下面這三次寫入沒能活下來。這些訊息是引擎自己的,只做了換行以便排版,其餘一字未動,包括其中的筆誤:
tags: {"SS": []}
ValidationException: One or more parameter values were invalid:
An string set may not be empty
pk: {"S": ""}
ValidationException: One or more parameter values are not valid.
The AttributeValue for a key attribute cannot contain an empty
string value. Key: pk
gsiKey: {"NULL": true}
ValidationException: Invalid attribute value type第三個才是陷阱。你不能把一個索引鍵置為 null 來讓某個項目待在稀疏索引之外:整次寫入會被拒絕,所以讓一個項目不被索引的唯一辦法是省略那個屬性。
NULL 算作"存在"
每一個過濾條件都把 NULL 屬性當成在那兒。用 attribute_exists(explicitNull) 掃描上面那個項目會把它返回來,explicitNull = :n(:n 設為 {"NULL": true})也會,attribute_type(explicitNull, "NULL") 同樣會。只有 attribute_not_exists 能把"顯式為 null"和"沒有儲存"區分開。
建模提示
完全省略一個屬性往往比存一個 NULL 更乾淨,而且它還能啟用稀疏索引。根據"缺失"和"顯式為 null"在你的模型裡是不是兩回事來做選擇。
深入瞭解
閱讀 DynamoDB 資料型別和稀疏索引。下載 DynoTable 可以直接編輯屬性,包括 NULL。
Expression Builder 為 attribute_exists 和 attribute_not_exists 過濾器生成名稱/值對映,以便您可以在付款之前對 Scan 進行健全性檢查。
在 DynoTable: 項目編輯器以所有三種 JSON 模式寫入 NULL 屬性。開啟一行,將欄位設定為空,並在提交之前暫存更改以供稽核。參見Editing items。
深入了解
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- PutItem — Amazon DynamoDB API Reference
最後核實於 2026-07-13,依據上方連結的 AWS 官方文件。
2026-07-28 透過 @aws-sdk/client-dynamodb 3.1095.0 針對 DynamoDB Local 3.3.0 復現——上方的錯誤字串與過濾結果均為引擎輸出,原樣照錄。實時服務對 ValidationException 的措辭可能與本地引擎不同。
深入了解
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- PutItem — Amazon DynamoDB API Reference
根據上面連結的官方AWS文件上次驗證時間為 2026 年 7 月 13 日。
透過 @aws-sdk/client-dynamodb 3.1095.0 針對 DynamoDB Local 3.3.0 於 2026 年 7 月 28 日轉載 — 上面的錯誤字串和過濾器結果是逐字引擎輸出。實時服務可以用與本地引擎不同的方式來表達 ValidationException。