← Все вопросы
Чем NULL отличается от пустой строки и как его проверять?
18
У меня в users колонка phone иногда пустая. Это NULL или пустая строка ''? И почему WHERE phone = NULL ничего не находит?
3 ответа
25
✓ Принятый ответ — помог автору
NULL и '' — это разные вещи. '' — это значение (строка нулевой длины, оно есть). NULL — это «значения нет / неизвестно».
Почему phone = NULL не работает: в SQL любое сравнение С NULL через = даёт не TRUE и не FALSE, а «неизвестно», поэтому строка не попадает в результат. Сравнивать NULL обычными операторами нельзя.
Правильно — через IS:
SELECT * FROM users WHERE phone IS NULL; -- телефона нет
SELECT * FROM users WHERE phone IS NOT NULL; -- телефон есть
SELECT * FROM users WHERE phone = ''; -- телефон есть, но пустая строка
Если хочешь поймать «и NULL, и пустые» одним условием:
SELECT * FROM users WHERE phone IS NULL OR phone = '';
Александра Захарова «сравнение с NULL = неизвестно» — вот почему = не срабатывало, дошло наконец 🙏 · 9 месяцев назад
10
Проверяй через IS NULL / IS NOT NULL, а не = NULL.
6
Ещё удобно COALESCE(phone, 'нет номера') — подменяет NULL на значение по умолчанию при выводе.
Ваш ответ
Войдите, чтобы ответить на вопрос.