SQL: stringa vuota vs valore NULL


72

So che questo argomento è un po 'controverso e ci sono molti articoli / opinioni fluttuanti su Internet. Sfortunatamente, la maggior parte di loro presume che la persona non sappia quale sia la differenza tra NULL e stringa vuota. Quindi raccontano storie di risultati sorprendenti con join / aggregati e generalmente tengono lezioni SQL un po 'più avanzate. In questo modo, mancano assolutamente il punto e sono quindi inutili per me. Quindi spero che questa domanda e tutte le risposte si sposteranno un po 'in avanti.

Supponiamo di avere una tabella con informazioni personali (nome, nascita, ecc.) In cui una delle colonne è un indirizzo e-mail con tipo varchar. Partiamo dal presupposto che per qualche motivo alcune persone potrebbero non voler fornire un indirizzo e-mail. Quando si inseriscono tali dati (senza e-mail) nella tabella, sono disponibili due opzioni: impostare la cella su NULL o impostarla su stringa vuota (''). Supponiamo di essere a conoscenza di tutte le implicazioni tecniche della scelta di una soluzione rispetto a un'altra e di poter creare query SQL corrette per entrambi gli scenari. Il problema è anche quando entrambi i valori differiscono a livello tecnico, sono esattamente gli stessi a livello logico. Dopo aver visto NULL e '' Sono giunto a una conclusione: non conosco l'indirizzo e-mail del ragazzo. Inoltre, non importa quanto ci abbia provato, Non sono stato in grado di inviare un'e-mail utilizzando NULL o stringa vuota, quindi apparentemente la maggior parte dei server SMTP là fuori concordano con la mia logica. Quindi tendo a usare NULL dove non conosco il valore e considero una stringa vuota una cosa negativa.

Dopo alcune intense discussioni con i colleghi sono arrivata con due domande:

  1. ho ragione nel dare per scontato che l'uso di una stringa vuota per un valore sconosciuto stia facendo "mentire" un database sui fatti? Per essere più precisi: usando l'idea di SQL di ciò che è valore e cosa non lo è, potrei giungere alla conclusione: abbiamo un indirizzo e-mail, solo scoprendo che non è nullo. Ma più tardi, quando provo a inviare e-mail, giungerò a una conclusione contraddittoria: no, non abbiamo un indirizzo e-mail, che il database @! # $ Deve aver mentito!

  2. Esiste uno scenario logico in cui una stringa vuota '' potrebbe essere un buon vettore di informazioni importanti (oltre al valore e nessun valore), che sarebbe problematico / inefficiente da memorizzare in qualsiasi altro modo (come colonna aggiuntiva). Ho visto molti post che affermano che a volte è bene usare una stringa vuota insieme a valori reali e NULL, ma finora non ho visto uno scenario logico (in termini di progettazione SQL / DB).

PS Alcune persone saranno tentate di rispondere, che è solo una questione di gusti personali. Non sono d'accordo Per me è una decisione di progettazione con conseguenze importanti. Quindi mi piacerebbe vedere le risposte in cui l'opion su questo è supportato da alcuni motivi logici e / o tecnici.


11
Sai che in Oracle la stringa vuota è NULL?
user281377

8
@ammoQ: il trattamento di Oracle con stringhe di lunghezza zero non è standard. Inoltre, ''anche in Oracle, non è lo stesso di NULL. Ad esempio, assegnando una CHAR(1)colonna il valore ''si tradurrà in ' '(cioè uno spazio), no NULL. Inoltre, se Jacek stesse usando Oracle, probabilmente questa domanda non verrebbe nemmeno sollevata :-)
Dean Harding,

2
Decano: hai ragione sull'esempio char (1), ma questo è ancora un altro WTF, poiché viene '' IS NULLvalutato truein PL / SQL.
user281377

"ho ragione nel supporre che l'uso di una stringa vuota per un valore sconosciuto stia causando un" bugiardo "sui fatti in un database?" se i tuoi utenti aziendali non si interessano di sconosciuto o vuoto, la bugia è importante?
Andy,

Se devi seguire il percorso di utilizzo di una stringa ... per favore, assicurati che sia vuota. Per il bene di tutti gli sviluppatori, non lasciare che una stringa con uno spazio in essa rappresenti il ​​tuo valore sconosciuto. Ti scongiuro.
Airn5475,

Risposte:


83

Direi che NULLè la scelta corretta per "nessun indirizzo e-mail". Esistono molti indirizzi e-mail "non validi" e "" (stringa vuota) è solo uno. Ad esempio "pippo" non è un indirizzo email valido, "a @ b @ c" non è valido e così via. Quindi, solo perché "" non è un indirizzo email valido non è un motivo per usarlo come valore "nessun indirizzo email".

Penso che tu abbia ragione nel dire che "" non è il modo corretto di dire "Non ho un valore per questa colonna". "" è un valore.

Un esempio di dove "" potrebbe essere un valore valido, separato da NULLpotrebbe essere il secondo nome di una persona. Non tutti hanno un secondo nome, quindi è necessario distinguere tra "nessun secondo nome" ("" - stringa vuota) e "Non so se questa persona ha un secondo nome o meno" ( NULL). Probabilmente ci sono molti altri esempi in cui una stringa vuota è ancora un valore valido per una colonna.


5
Completamente d'accordo. NULL è lì per un motivo. SELEZIONA IL CONTEGGIO (*) DA TUOBILE DOVE EMAIL È [NON] NULL è il modo di farlo, non un confronto di stringhe che tenderà ad essere più lento (anche per stringhe vuote suppongo ma non ne sono sicuro :)).
LudoMC,

5
Penso NULLche non significhi che non esiste un indirizzo e-mail, penso che ciò significhi che l'indirizzo e-mail non è attualmente noto, non è noto per esistere o è impossibile compilare per altri motivi. Fortunatamente, non c'è probabilmente una situazione in cui si vorrebbe conservare in un database le informazioni su persone che non hanno veramente e non hanno in programma di avere un indirizzo e-mail, altrimenti sarebbe probabilmente necessario un campo booleano separato.
Alexey,

9
@Alexey - NULL significa che non esiste alcun valore. Come altri hanno sottolineato, una stringa vuota è un valore.
Ramhound,

3
@Ramhound, sono d'accordo sul fatto che la stringa vuota sia un valore e che NULL significhi vagamente "non esiste alcun valore". Ho appena spiegato la mia interpretazione di "nessun valore". A mio avviso, non è lo stesso di "la persona non ha aperto alcun account di posta elettronica". È piuttosto "nessun indirizzo email registrato per quella persona".
Alexey,

5
@Ramhound NULL significa che non esiste alcun valore. Una persona senza un secondo nome non ha valore lì. Pertanto, NULL dovrebbe essere utilizzato anche in una colonna iniziale centrale ... Il che è completamente opposto all'argomento presentato in questa risposta.
Izkata,

41

Pur concordando con i commenti di cui sopra, aggiungerei questo argomento come motivazione principale:

  1. È ovvio per qualsiasi programmatore che guarda un database che un campo contrassegnato come NULL è un campo opzionale. (ovvero il record non richiede dati per quella colonna)
  2. Se si contrassegna un campo NON NULL, qualsiasi programmatore dovrebbe assumere intuitivamente che si tratta di un campo obbligatorio.
  3. In un campo che consente null, i programmatori dovrebbero aspettarsi di vedere null anziché stringhe vuote.

Per motivi di codifica intuitiva auto-documentante, utilizzare NULL invece di stringhe vuote.


4
+1 Questo è l'argomento "minimo stupore" rispetto agli sviluppatori contro stringhe vuote. Nessuno sviluppatore successivo si aspetterebbe mai che le stringhe vuote vengano utilizzate per rappresentare "nessun indirizzo e-mail".
Thomas,

6

Nel tuo esempio se è un valore direttamente dal campo web, userei una stringa vuota. Se l'utente ha la possibilità di specificare che non desidera fornire e-mail o può eliminarlo, quindi NULL.

Ecco il link con i punti che potresti prendere in considerazione: https://stackoverflow.com/questions/405909/null-vs-empty-when-dealing-with-user-input/405945#405945

--- modificato (in risposta al commento di Thomas) ---

I database non vivono senza le applicazioni che li usano. La definizione di NULL o '' non ha alcun valore, se l'applicazione non può utilizzarlo correttamente.

Considera un esempio in cui l'utente sta compilando il modulo LONG e premi invio, che invierà la richiesta persistente al server. Potrebbe essere nel mezzo di inserire la sua email. Molto probabilmente vuoi archiviare tutto ciò che ha nel campo e-mail, quindi in seguito potrebbe finirlo. E se avesse inserito solo un personaggio? Cosa succede se immette un carattere e poi lo elimina? Quando l'e-mail non è richiesta, a volte gli utenti vogliono eliminarla: il modo più semplice per cancellare il campo. Anche nel caso in cui non sia richiesta la posta elettronica, vale la pena convalidarla prima dell'invio.

Un altro esempio: l'utente fornisce l'e-mail come spamto @ [bigcompany] .com - in tal caso non è necessario inviare e-mail, anche se è presente e valida (e può anche esistere). L'invio di uno di questi potrebbe essere economico, ma se ci sono 10K utenti con tali e-mail per abbonamenti giornalieri, tale convalida potrebbe risparmiare molto tempo.


7
-1. Non importa se il database gestisce o meno un sito Web. La progettazione di database è un mondo diverso dal web design. Il database deve essere progettato per acquisire informazioni sul dominio aziendale indipendentemente dall'interfaccia utilizzata per scrivere su di esso. Secondo la tua logica, dovresti usare null se per coincidenza la prima applicazione è un eseguibile? Cosa succede se la prima app è un'applicazione Web ma la successiva è un'app mobile? Progettare il database per acquisire fatti utilizzando le regole di normalizzazione e progettare il sito Web per scrivere su di esso.
Thomas,

Sono contento che tu abbia imparato a scrivere e commentare questo sito :) Credo ancora che DB dovrebbe supportare l'applicazione che lo utilizza. Controlla la mia risposta modificata.
Konstantin Petrukhnov,

4
I database non vivono senza le applicazioni che li usano. Nella mia esperienza, questo non è semplicemente vero e miope. Quasi sempre il database viene utilizzato al di fuori dell'applicazione per cui è stato progettato. In generale, i database sopravvivono più a lungo delle applicazioni per cui sono stati creati. I database dovrebbero essere progettati per raccogliere fatti sull'azienda e l'interfaccia utente dovrebbe essere costruita per leggere e scrivere nel database non viceversa. Il design relazionale ha una mentalità completamente diversa rispetto al design dell'applicazione.
Thomas,

2
Esempi in cui il database non è utilizzato esclusivamente dall'applicazione originale : report, integrazioni con altri sistemi.
Thomas,

1
Come ha indicato Thomas, i DB possono e sono spesso utilizzati da più di un'applicazione, il che aggiunge peso all'idea di mantenere puliti i dati del DB. Se non vuoi / non puoi gestire i NULL nella tua applicazione, puoi semplicemente sostituirli con i tuoi "valori magici" (bella descrizione Thomas) al tuo livello di accesso ai dati. In questo modo tutte le applicazioni future che desiderano accedere al DB non devono conoscere / conformarsi ai valori magici delle applicazioni originali.
bendemes,

5

Penso che la risposta di Dean Hardings lo copra davvero bene. Detto questo, vorrei ricordare che quando si parla di NULL rispetto a stringhe vuote a livello di DB, è necessario riflettere sugli altri tipi di dati. Conserveresti la data minima quando non viene fornita la data? o -1 quando non viene fornito nessun int? Memorizzare un valore quando non si ha alcun valore significa che è necessario tenere traccia di un intero intervallo di non valori. Almeno uno per ogni tipo di dati (forse di più man mano che si ottengono casi in cui -1 è un valore effettivo, quindi è necessario disporre di alcune alternative, ecc.). Se hai bisogno / vuoi fare qualcosa di "confuso" a livello di applicazione che è una cosa, ma non è necessario inquinare i tuoi dati.


2
+1 - Questo è ciò che chiamo la "Soluzione del valore magico". Dobbiamo trovare un valore magico per ciascun tipo di dati per rappresentare un'assenza di un valore. Inoltre, in alcune colonne il valore magico comune è o diventa un valore legittimo e quindi è necessario un nuovo valore magico.
Thomas,

5

Sfortunatamente, Oracle ha confuso la rappresentazione della stringa VARCHAR di lunghezza zero con la rappresentazione di NULL. Entrambi sono rappresentati internamente da un singolo byte con valore zero. Questo rende la discussione ancora più difficile.

Molta della confusione che circonda NULL è incentrata su una logica a tre valori . Considera il seguente pseudocodice:

if ZIPCODE = NULL
    print "ZIPCODE is NULL"
else if ZIPCODE <> NULL
    print "ZIPCODE is not NULL"
else print "Something unknown has happened"

Non ti aspetteresti il ​​terzo messaggio, ma è quello che otterrai, in base a tre logiche apprezzate. Tre logiche apprezzate conducono le persone verso numerosi bug.

Un'altra fonte di confusione è trarre inferenze dall'assenza di dati, come trarre un'inferenza dal cane che non abbaiava nella notte. Spesso queste inferenze non erano ciò che lo scrittore del NULL intendeva cnvey.

Detto questo, ci sono molte situazioni in cui NULL gestisce bene l'assenza di dati e produce esattamente i risultati desiderati. Un esempio sono le chiavi esterne nelle relazioni opzionali. Se si utilizza un valore NULL per indicare nessuna relazione in una determinata riga, quella riga verrà eliminata da un join interno, proprio come ci si aspetterebbe.

Inoltre, tieni presente che anche se eviti NULL completamente nei dati memorizzati (sesto modulo normale), se esegui un join esterno, dovrai comunque far fronte a NULL.


4

Usa null.

Non ha senso memorizzare un valore di '', quando semplicemente renderà nulla il campo nella tabella. Rende anche le domande più ovvie.

Quale query SQL è più ovvia e leggibile se si desidera trovare utenti con un indirizzo e-mail?

  1. SELECT * FROM Users WHERE email_address != ''

  2. SELECT * FROM Users WHERE email_address IS NOT NULL

  3. SELECT * FROM Users WHERE email_address != '' and email_address IS NOT NULL

Direi 2 lo è. Sebbene 3 sia più robusto nei casi in cui sono archiviati dati errati.

Nel caso dell'indirizzo e-mail sul modulo, che è facoltativo, dovrebbe essere riportato anche nella tabella. In SQL, è un campo nullable, il che significa che non è noto.

Non riesco a pensare a un valore aziendale ragionevole nel memorizzare una stringa vuota in una tabella diversa dal semplice design errato. È come memorizzare un valore di stringa "NULL" o "BLANK" e far supporre che gli sviluppatori siano nulli o una stringa vuota. Per me è un cattivo design. Perché conservarlo quando c'è NULL ??

Usa NULL e renderai tutti un po 'più felici.

ULTERIORI INFORMAZIONI:

SQL utilizza un sistema logico a tre valori: True, False e Unknown.

Per una spiegazione migliore e più dettagliata, raccomando agli sviluppatori di leggere: Query SQL - oltre VERO e FALSO .


3

per la specifica domanda tecnica, il problema non è null vs stringa vuota, è un errore di convalida . Una stringa vuota non è un indirizzo email valido!

per la domanda filosofica, la risposta è simile: convalida i tuoi input. Se una stringa vuota è un valore valido per il campo in questione, quindi aspettalo e codifica per esso; in caso contrario, utilizzare null.

Una stringa vuota sarebbe un valido input per rispondere alla domanda: che cosa ha detto il mimo alla giraffa?


Anche con le migliori intenzioni al mondo, la convalida potrebbe non risolvere questo problema - potrebbe comunque essere necessario utilizzare un metodo che si occupa delle righe in cui tutte le colonne devono essere fornite con un qualche tipo di valore. In tal caso, la domanda rimarrà: quale valore usare quando non c'è valore? E la risposta sarà ovviamente: il valore che non indica alcun valore. Nei DB questo comunemente NULL.
jmoreno,

2

Potrei pensare a un motivo per avere NULL e la stringa vuota:

  • Hai indirizzi email validi: me@example.com
  • Non ne hai (e probabilmente dovresti chiederne uno): NULL
  • Sai che questa persona non ha un indirizzo email: Empty String.

Tuttavia, non lo consiglierei e utilizzerei un campo separato per chiedere se sai che non esiste.


1

La domanda a mio avviso è quali interpretazioni di NULL e stringa vuota debbano essere scelte. Questo dipende da quanti stati può trovarsi il campo particolare.

L'interpretazione dipende da come si accede al database. Se nel codice è presente un livello che consente di estrarre completamente il database, è assolutamente accettabile la scelta di qualsiasi criterio (inclusi due simboli) che funzioni. (Documentare chiaramente la politica è importante, però). Tuttavia, se si accede al database in più punti, è necessario utilizzare uno schema molto semplice, poiché il codice sarà più difficile da mantenere e potrebbe essere errato in questo caso.


1

Beh, fondamentalmente a livello logico non c'è alcuna differenza tra valore "non valido" e "nessun input dell'utente", sono solo tutti "casi speciali" il più delle volte. Caso di errore

Avere null richiede spazio aggiuntivo: ceil (colonne_con_null / 8) in byte / per riga.

Cella vuota e null sono entrambi modi per contrassegnare qualcosa che non va / dovrebbe essere predefinito. Perché avresti bisogno di 2 stati "sbagliati"? Perché usare i NULL se occupano spazio aggiuntivo e significano esattamente le stesse delle stringhe vuote? Ciò introdurrà confusione e ridondanza quando si hanno due cose che significano (che potrebbero significare) esattamente lo stesso, è facile dimenticare che è necessario utilizzare NULL invece di stringhe vuote (se, ad esempio, l'utente ha preferito alcuni campi).

E i tuoi dati possono diventare un disastro. In un mondo perfetto diresti "i dati saranno sempre corretti e lo ricorderò" ... ma quando le persone devono lavorare in una squadra e non tutti sono esattamente al tuo livello non è raro vedere DOVE (aa. xx <> '' E bb.zz NON È NULL)

Quindi, invece di correggere i membri del mio team a giorni alterni, impongo semplicemente una regola semplice. Nessun valore nullo, MAI!

Il conteggio dei valori NON-NULL è più veloce ... la semplice domanda è per cosa dovresti farlo?


Ricordo vagamente di aver letto da qualche parte che l'utilizzo di NULL è in realtà un costo (sia in termini di calcolo che di archiviazione) per il database. Quindi buon punto nel portare quella formula.
Jacek Prucia,

Non dimenticare che una VARCHARcolonna richiederà almeno 1 byte per memorizzare la lunghezza della stringa, anche se è zero.
dan04,

Cella vuota e null sono entrambi modi per contrassegnare qualcosa che non va . Non vero. Un null è un modo per indicare un'assenza di un valore. Scommetto che molti RDBMS usano un array di bit su ogni riga per indicare quali colonne sono nulle. Pertanto, lo spazio aggiuntivo è così piccolo da essere irrilevante. Preoccuparsi dell'elaborazione aggiuntiva è l'ottimizzazione prematura e non sarà nulla rispetto ai dossi creati per consentire agli altri sviluppatori di "scoprire" che sono state utilizzate intenzionalmente stringhe vuote.
Thomas,

3
Nessun valore nullo . Questo è l'approccio dello struzzo. "Attaccheremo la testa nella sabbia e dichiareremo che non esistono valori assenti". Questo di solito porta alla Soluzione del valore magico in cui devi trovare un valore magico per ogni tipo di dati per rappresentare un'assenza di un valore.
Thomas,

1

Tendo a vederlo non dal punto di vista del DB ma dal punto di vista del programma. So che questa domanda riguarda il clic SQL, ma in realtà quanti utenti accedono ai dati direttamente più a lungo?

In un programma non mi piace null / niente. Ci sono alcune eccezioni, ma sono proprio questo. E quelle eccezioni sono solo cattive implementazioni.

Quindi, se l'utente non ha inserito l'e-mail, dovrebbe esserci qualcosa che determina se questo è valido o meno. Se un messaggio di posta elettronica vuoto va bene, viene visualizzata una stringa vuota. Se l'utente non ha inserito un'e-mail e ciò viola una regola, l'oggetto dovrebbe indicarlo.

L'idea che nulla abbia significato è vecchia scuola ed è qualcosa che i programmatori moderni devono aggirare.

Anche nella progettazione di DB perché il campo e-mail non può consentire valori null e avere una stringa di lunghezza zero e un altro campo che indica se l'utente ha inserito qualcosa? È un po 'troppo chiedere a un DBMS? A mio avviso, il DB non dovrebbe gestire né la logica aziendale né la logica di visualizzazione. Non è stato costruito per questo e quindi fa un pessimo lavoro di gestione.


perché il campo email non può consentire valori null e avere una stringa di lunghezza zero - In poche parole: perché qualsiasi sviluppatore che conosce qualcosa sui database non si aspetterebbe mai che le stringhe vuote abbiano un significato magico. Stai tentando di creare il tuo valore magico per rappresentare ciò che fondamentalmente esiste già in ogni database: un concetto per rappresentare un'assenza di un valore. Perché reinventare la ruota? Inoltre, l'idea di NULLS è lontana, lontana, lontana dalla vecchia scuola. I null sono la chiave di volta per comprendere la progettazione di database relazionali.
Thomas,

LOL. Come ho detto dal punto di vista dei programmatori, i null sono quasi sempre una seccatura e non sono quasi mai necessari per BUSINESS LOGIC. Personalmente, come sviluppatore, non mi interessa molto il design relazionale. Se lo facessi sarei un tipo DB. Se ricevo un null da un DB, lo converto quasi sempre in qualcosa di razionale, come una stringa vuota, quindi lascia che il mio glorioso design OOP faccia la magia. Il framework si occupa di quegli sciocchi DBA che impongono al mondo. So che i tipi di DB devono occuparsene e lo provo per te. Ma come programmatore non devo. Ho soluzioni migliori.
ElGringoGrande,

"Non" devi mai fare i conti con i null. Quindi, ciò che descrivi è la soluzione di struzzo combinata con la soluzione di valore magico. "Ignorerò il fatto che esistano valori assenti e convertirò tutti gli interi null in -1". Fino al giorno in cui -1 è un valore reale. Va notato che uno dei motivi per cui MS ha aggiunto i generici a .NET è stato quello di affrontare l'enorme discrepanza di impedenza tra database e codice delle applicazioni e che ruotava principalmente attorno all'espressione di valori null nel codice di livello intermedio. Questi "sciocchi null" esistono anche nella logica aziendale.
Thomas,

Il fatto che un numero intero sia assente nel db (o è nullo) non significa che devo rappresentarlo con -1 o evan un nullable (int). Se pensi che sia l'unico modo per gestire i null, non capisci molto bene la programmazione. Ricorda che null non è la stessa cosa di niente. Come hai detto, null rappresenta un segnaposto per valori assenti in una sorta di struttura dei dati. Significa qualcosa La logica aziendale raramente (che non è la stessa di mai) ha bisogno di questo concetto perché si tratta di beahvior, non di dati. E quando lo fa null è raramente il modo migliore per rappresentarlo.
ElGringoGrande,

Anche la logica aziendale deve tenere conto (nel senso rappresentare) valori assenti e questo è vero nella mia esperienza, in quasi tutti i sistemi che ho visto o costruito negli ultimi 20 anni. Il database sta modellando i fatti aziendali da acquisire e archiviare. Se la logica aziendale vuole essere in grado di interagire con il database, deve sapere come gestire i valori null. Non importa se si tratta di una struttura personalizzata, di un valore magico o di un generico. La logica aziendale richiede la capacità di gestire la ricezione di un valore assente dal database e la capacità di contrassegnare un valore come assente nel database.
Thomas,

-1

Non penso che importi molto, ma mi piace di più quando c'è il NULL.

Quando visualizzo i dati visualizzati in una tabella (come in SQL Server Management Studio), posso meglio distinguere un valore mancante se dice NULL e lo sfondo è di colore diverso.

Se vedo uno spazio vuoto, mi chiedo sempre se è davvero vuoto o c'è uno spazio bianco o alcuni personaggi invisibili. Con NULL è garantito vuoto a prima vista.

inserisci qui la descrizione dell'immagine

Di solito non distinguo i valori nell'applicazione, perché è inaspettato e strano che NULL e stringa vuota significhino qualcosa di diverso. E il più delle volte, ho un approccio difensivo e mi occupo solo di entrambi gli stati. Ma per me come essere umano, NULL è più facile da elaborare quando si guardano i dati.


questo non sembra offrire nulla di sostanziale rispetto ai punti formulati e spiegati nelle precedenti 12 risposte
moscerino

@gnat: Non sono d'accordo, nessuno nelle risposte ha menzionato l'aspetto della visualizzazione umana dei dati. C'è solo un singolo valore NULL, ma possono esserci molti valori che sembrano una stringa vuota (non solo spazi bianchi, ma ci sono anche molti caratteri Unicode che si comportano in modo strano). Non riesco a vedere altre risposte che menzionino questo aspetto del problema.
Tom Pažourek, l'

per quanto posso dire, questo è stato abbastanza ben definito nella seconda risposta principale che è stata pubblicata 5 anni fa: "È ovvio per qualsiasi programmatore che guarda un database ..." ecc.
moscerino

@gnat: vedo il tuo punto, anche se penso che l'autore non abbia lo stesso significato. Credo che sia più che NULL implica campi opzionali, ma una stringa vuota può essere utilizzata anche per i campi obbligatori, quindi NULL è più logico per il valore mancante. Sono d'accordo con lui. Ma la mia risposta indica che la stringa vuota non è inequivocabile come il valore NULL, perché molte cose possono sembrare stringhe vuote a prima vista pur non essendo effettivamente stringhe vuote.
Tom Pažourek, l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.