Когда мы создаем поле в таблице MySQL у нас есть возможность поставить галочку Nullable для создаваемого поля.

С одной стороны, кажется, почему бы ее не поставить? Все же будет работать точно также. Но здесь есть несколько подводных камней:

+ Поле с NULL - это +2 байта к каждой строке таблицы. На небольших таблицах это несущественно, но если у вас будет 1 млн. записей - это уже + 2Мб к размеру базы данных. А если таких полей более одного, размер увеличится соответственно.

+ Самая главная проблема, на мой взгляд, в другом. Если мы попробуем выполнить запрос

SELECT * FROM table WHERE column_name=''

Строки со значением NULL в этом случае будут отсутствовать в выдаче. Нам нужно расширить запрос до:

SELECT * FROM table WHERE column_name='' or column_name is NULL

Вроде бы мелочь. Но сегодня потратил кучу времени в одном из проектов, чтобы разобраться в чем причина несоответствия статистики с реальными данными. Оказалось, нужно было включить в запрос строки со значением NULL.

Это нужно постоянно держать в голове.

В общем, ребята, если есть возможность создать поле без NULL, лучше создавать без NULL.

Успехов!