DynamoDB può avere valori nulli?
SÌ. DynamoDB ha un tipo NULL dedicato che rappresenta un attributo con uno stato sconosciuto o non definito. Consente inoltre stringhe vuote e valori binari vuoti per attributi non chiave, oltre a elenchi e mappe vuoti. Non consente set vuoti (stringa, numero o binario), che vengono rifiutati con un ValidationException.
Il tipo NULL
NULL è un tipo di attributo reale, scritto come {"NULL": true}. Usalo quando vuoi registrare che un campo esiste ma non ha valore, distinto dalla semplice omissione dell'attributo.
Quali vuoti sono consentiti
- Stringa vuota/binario vuoto: consentito su attributi non chiave e all'interno di elenchi e mappe.
- Elenco vuoto/mappa vuota — consentito.
Cosa non è consentito
- Set vuoti (SS, NS, BS) — rifiutati con un
ValidationException. - Stringa vuota o binaria su un attributo chiave: i valori chiave devono avere una lunghezza maggiore di zero.
Come appaiono i rifiuti
Un PutItem ha accettato {"NULL": true}, {"S": ""}, {"L": []}, {"M": {}} e un {"B": ""} a byte zero nello stesso elemento e GetItem li ha restituiti tutti e cinque invariati. Queste tre scritture non sono sopravvissute. I messaggi sono quelli del motore, confezionati per adattarsi e altrimenti intatti, errori di battitura inclusi:
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 typeQuella terza è la trappola. Non è possibile annullare una chiave di indice per mantenere un elemento fuori da un indice sparso: l'intera scrittura viene rifiutata, quindi l'unico modo per lasciare un elemento non indicizzato è omettere l'attributo.
NULL conta come presente
Ogni filtro tratta un attributo NULL come se fosse lì. Scan associando l'elemento sopra con attribute_exists(explicitNull) lo ha restituito, così come explicitNull = :n con :n impostato su {"NULL": true} e attribute_type(explicitNull, "NULL"). Solo attribute_not_exists separa "esplicitamente nullo" da "non memorizzato".
Suggerimento per modellare
Omettere completamente un attributo è spesso più pulito rispetto alla memorizzazione di NULL e consente indici sparsi. Scegli in base al fatto che "assente" e "esplicitamente nullo" abbiano significati diversi nel tuo modello.
Creazione di filtri attorno a NULL
Le espressioni Filtro trattano NULL come presente. Per trovare elementi con un valore null esplicito, utilizzare attribute_type(attr, 'NULL') o confrontare :n con {"NULL": true}. Per escluderli, utilizzare attribute_not_exists o testare un tipo di cemento come attribute_type(attr, 'S'), a seconda del modello.
Il Creatore di espressioni genera le mappe name/value per i filtri attribute_exists e attribute_not_exists in modo da poter controllare l'integrità di un Scan prima di pagarlo.
In DynoTable: l'editor degli elementi scrive gli attributi NULL in tutte e tre le modalità JSON. Apri una riga, imposta un campo su null e metti in scena la modifica per la revisione prima che venga confermata. Vedere Modifica degli elementi.
Approfondisci
Leggere tipi di dati DynamoDB e indici sparsi. Scarica DynoTable per modificare direttamente gli attributi, incluso NULL.
Riferimenti
- Tipi di dati supportati e regole di denominazione in Amazon DynamoDB — Guida per sviluppatori di Amazon DynamoDB
- Limiti in Amazon DynamoDB - Guida per sviluppatori di Amazon DynamoDB
- PutItem - Riferimento Amazon DynamoDB API
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale AWS collegata sopra.
Riprodotto il 28-07-2026 rispetto a DynamoDB Local 3.3.0 tramite @aws-sdk/client-dynamodb 3.1095.0: le stringhe di errore e i risultati del filtro sopra sono l'output letterale del motore. Il servizio live può codificare un ValidationException in modo diverso dal motore locale.