Non conosco MySQL e PostgreSQL, ma vorrei trattarlo un po 'in generale.
Esiste un DBMS, ovvero Oracle, che non consente di scegliere gli utenti tra NULL e ''. Ciò dimostra chiaramente che non è necessario distinguere tra entrambi. Ci sono alcune fastidiose conseguenze:
Si imposta varchar2 su una stringa vuota come questa:
Update mytable set varchar_col = '';
quanto segue porta allo stesso risultato
Update mytable set varchar_col = NULL;
Ma per selezionare le colonne in cui il valore è vuoto o NULL, devi usare
select * from mytable where varchar_col is NULL;
utilizzando
select * from mytable where varchar_col = '';
è sintatticamente corretto, ma non restituisce mai una riga.
Dall'altro lato, quando si concatenano le stringhe in Oracle. I varchar NULL vengono trattati come stringhe vuote.
select NULL || 'abc' from DUAL;
cede abc . Altri DBMS restituirebbero NULL in questi casi.
Quando vuoi esprimere esplicitamente che un valore è assegnato, devi usare qualcosa come ''.
E devi preoccuparti se il taglio non vuoti provoca NULL
select case when ltrim(' ') is null then 'null' else 'not null' end from dual
Lo fa.
Ora guardiamo DBMS dove '' non è identico a NULL (ad es. SQL Server)
Lavorare con "" è generalmente più semplice e nella maggior parte dei casi non è necessario distinguere tra entrambi. Una delle eccezioni che conosco è quando la tua colonna rappresenta alcune impostazioni e non hai valori predefiniti vuoti per loro. Quando puoi distinguere tra '' e NULL sei in grado di esprimere che l'impostazione è vuota ed evitare che si applichi il valore predefinito.
NULL
o no