Nie wiem o MySQL i PostgreSQL, ale pozwól mi potraktować to trochę ogólnie.
Jest jeden DBMS, a mianowicie Oracle, który nie pozwala wybrać użytkowników pomiędzy NULL a „”. To wyraźnie pokazuje, że nie jest konieczne rozróżnienie między nimi. Istnieją pewne irytujące konsekwencje:
Ustawiasz varchar2 na pusty ciąg taki jak ten:
Update mytable set varchar_col = '';
następujące prowadzi do tego samego wyniku
Update mytable set varchar_col = NULL;
Ale aby wybrać kolumny, w których wartość jest pusta lub NULL, musisz użyć
select * from mytable where varchar_col is NULL;
Za pomocą
select * from mytable where varchar_col = '';
jest poprawny pod względem składniowym, ale nigdy nie zwraca wiersza.
Z drugiej strony, podczas łączenia łańcuchów w Oracle. Warchary NULL są traktowane jako puste ciągi.
select NULL || 'abc' from DUAL;
daje abc . W innych przypadkach DBMS zwróciłoby wartość NULL.
Jeśli chcesz wyraźnie wyrazić, że wartość jest przypisana, musisz użyć czegoś takiego jak ''.
I musisz się martwić, czy przycinanie niepustych wyników daje NULL
select case when ltrim(' ') is null then 'null' else 'not null' end from dual
To robi.
Teraz patrząc na DBMS, gdzie „” nie jest identyczne z NULL (np. SQL-Server)
Praca z „” jest na ogół łatwiejsza iw większości przypadków nie ma praktycznej potrzeby rozróżnienia między nimi. Jednym z wyjątków, jaki znam, jest sytuacja, gdy kolumna reprezentuje jakieś ustawienie i nie ma dla nich pustych ustawień domyślnych. Kiedy możesz rozróżnić „” i „NULL”, możesz wyrazić, że twoje ustawienie jest puste i uniknąć domyślnego ustawienia.
NULL
lub nie