Я не знаю о MySQL и PostgreSQL, но позвольте мне немного об этом поговорить.
Существует одна СУБД, а именно Oracle, которая не позволяет выбирать пользователей между NULL и ''. Это ясно демонстрирует, что нет необходимости различать оба. Есть некоторые досадные последствия:
Вы устанавливаете varchar2 в пустую строку следующим образом:
Update mytable set varchar_col = '';
следующее приводит к тому же результату
Update mytable set varchar_col = NULL;
Но чтобы выбрать столбцы, в которых значение пусто или равно NULL, необходимо использовать
select * from mytable where varchar_col is NULL;
С помощью
select * from mytable where varchar_col = '';
синтаксически правильно, но никогда не возвращает строку.
С другой стороны, при объединении строк в Oracle. NULL varchars обрабатываются как пустые строки.
select NULL || 'abc' from DUAL;
дает abc . Другие СУБД возвращали бы NULL в этих случаях.
Если вы хотите явно указать, что значение назначено, вы должны использовать что-то вроде ''.
И вам нужно беспокоиться, приведет ли обрезка к пустым значениям в NULL
select case when ltrim(' ') is null then 'null' else 'not null' end from dual
Оно делает.
Теперь посмотрим на СУБД, где '' не совпадает с NULL (например, SQL-сервер)
Работать с '', как правило, проще, и в большинстве случаев нет практической необходимости различать оба. Одно из исключений, которое я знаю, это когда ваш столбец представляет некоторые настройки, и у вас нет пустых значений по умолчанию для них. Когда вы можете различить '' и NULL, вы можете указать, что ваш параметр пуст и избежать применения по умолчанию.
NULL
или нет