Je ne connais pas MySQL ni PostgreSQL, mais laissez-moi traiter cela un peu en général.
Il existe un SGBD, à savoir Oracle, qui ne permet pas de choisir ses utilisateurs entre NULL et ''. Cela démontre clairement qu'il n'est pas nécessaire de faire la distinction entre les deux. Il y a des conséquences agaçantes:
Vous définissez un varchar2 sur une chaîne vide comme ceci:
Update mytable set varchar_col = '';
ce qui suit conduit au même résultat
Update mytable set varchar_col = NULL;
Mais pour sélectionner les colonnes où la valeur est vide ou NULL, vous devez utiliser
select * from mytable where varchar_col is NULL;
En utilisant
select * from mytable where varchar_col = '';
est syntaxiquement correct, mais il ne retourne jamais une ligne.
De l'autre côté, lors de la concaténation de chaînes dans Oracle. Les varchars NULL sont traités comme des chaînes vides.
select NULL || 'abc' from DUAL;
donne abc . Les autres SGBD renverraient NULL dans ces cas.
Quand vous voulez exprimer explicitement qu'une valeur est assignée, vous devez utiliser quelque chose comme ''.
Et vous devez vous demander si le rognage n'est pas vide, cela donne NULL
select case when ltrim(' ') is null then 'null' else 'not null' end from dual
Cela fait.
Regardons maintenant les SGBD où '' n'est pas identique à NULL (par exemple, SQL-Server)
Travailler avec '' est généralement plus facile et dans la plupart des cas, il n’est pas nécessaire de faire la distinction entre les deux. Une des exceptions que je connaisse est lorsque votre colonne représente un paramètre et que vous ne disposez pas de valeurs par défaut vides. Lorsque vous pouvez faire la distinction entre '' et NULL, vous pouvez indiquer que votre paramètre est vide et éviter que la valeur par défaut ne s'applique.
NULL
ou non