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 type

Quella 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

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.

Lavora con DynamoDB senza la Console

Un client desktop veloce per DynamoDB che esegue il vero SQL che DynamoDB non può — JOINs, GROUP BY, aggregazioni — con modifica visuale e un agente AI sulle tue chiavi Bedrock.

Prova gratuita di 30 giorni, senza carta di credito — poi il piano Free senza limiti di tempo.