← Все вопросы

Чем NULL отличается от пустой строки и как его проверять?

Задан 9 месяцев назад1.1к просмотров3 ответа
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 на значение по умолчанию при выводе.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект