Я не знаю про 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 вархари трактуються як порожні рядки.
select NULL || 'abc' from DUAL;
врожайність абс . Інші СУБД повертають NULL у цих випадках.
Коли ви хочете чітко виразити, що присвоєно значення, вам доведеться використовувати щось на зразок ''.
І вам потрібно переживати, чи не обрізка не порожніх результатів у NULL
select case when ltrim(' ') is null then 'null' else 'not null' end from dual
Це робить.
Тепер дивимось на СУБД, де '' не ідентично NULL (наприклад, SQL-сервер)
Працювати з "" взагалі простіше, і в більшості випадків немає різниці між обома. Одне з відомих мені винятків - це коли ваш стовпець представляє деяке налаштування, і ви не маєте порожніх за замовчуванням для них. Коли ви можете розрізняти '' і NULL, ви можете висловити, що ваш параметр порожній, і уникнути застосування стандартних стандартів.
NULL
чи ні