Ich weiß nichts über MySQL und PostgreSQL, aber lassen Sie mich das etwas allgemein behandeln.
Es gibt ein DBMS, nämlich Oracle, bei dem die Benutzer nicht zwischen NULL und '' ausgewählt werden können. Dies zeigt deutlich, dass nicht zwischen beiden unterschieden werden muss. Es gibt einige ärgerliche Konsequenzen:
Sie setzen ein varchar2 auf eine leere Zeichenfolge wie folgt:
Update mytable set varchar_col = '';
Das Folgende führt zum gleichen Ergebnis
Update mytable set varchar_col = NULL;
Um jedoch die Spalten auszuwählen, in denen der Wert leer oder NULL ist, müssen Sie verwenden
select * from mytable where varchar_col is NULL;
Verwenden
select * from mytable where varchar_col = '';
ist syntaktisch korrekt, gibt aber niemals eine Zeile zurück.
Auf der anderen Seite, wenn Sie Zeichenfolgen in Oracle verketten. NULL-Varchars werden als leere Zeichenfolgen behandelt.
select NULL || 'abc' from DUAL;
ergibt abc . Andere DBMS würden in diesen Fällen NULL zurückgeben.
Wenn Sie explizit ausdrücken möchten, dass ein Wert zugewiesen ist, müssen Sie so etwas wie "" verwenden.
Und Sie müssen sich Sorgen machen, ob das Zuschneiden nicht zu NULL führt
select case when ltrim(' ') is null then 'null' else 'not null' end from dual
Es tut.
Betrachtet man nun DBMS, bei dem '' nicht mit NULL identisch ist (zB SQL-Server)
Die Arbeit mit '' ist im Allgemeinen einfacher und in den meisten Fällen besteht keine praktische Notwendigkeit, zwischen beiden zu unterscheiden. Eine der Ausnahmen, die ich kenne, ist, wenn Ihre Spalte eine Einstellung darstellt und Sie keine leeren Standardeinstellungen für sie haben. Wenn Sie zwischen '' und NULL unterscheiden können, können Sie ausdrücken, dass Ihre Einstellung leer ist, und vermeiden, dass die Standardeinstellung angewendet wird.
NULL
oder nicht