У меня проблема, когда при попытке выбрать строки, которые имеют NULL для определенного столбца, он возвращает пустой набор. Тем не менее, когда я смотрю на таблицу в phpMyAdmin, он говорит, что ноль для большинства строк.
Мой запрос выглядит примерно так:
SELECT pid FROM planets WHERE userid = NULL
Пустой набор каждый раз.
Во многих местах сказано, что он не хранится как «NULL» или «NULL» вместо фактического значения, а один говорит, что пытается найти только пробел ( userid = ' '
), но ни одно из них не сработало. Было предложение не использовать MyISAM и использовать innoDB, потому что MyISAM имеет проблемы с хранением нулевого значения. Я переключил таблицу на innoDB, но теперь я чувствую, что проблема может заключаться в том, что она все еще не является фактически нулевой из-за способа, которым она может преобразовать ее. Я хотел бы сделать это без необходимости воссоздавать таблицу как innoDB или что-то еще, но если мне нужно, я, конечно, могу попробовать это.
Ответы:
SQL NULL особенный, и вы должны сделать
WHERE field IS NULL
, так как NULL не может быть равен чему-либо,включая себя (то есть: NULL = NULL всегда ложно).См.
Rule 3
Https://en.wikipedia.org/wiki/Codd%27s_12_rules.источник
select * from foo where bar <> "abc"
будет возвращать строки, где bar равен нулю. Это бросило меня в тупик сегодня. Документы вызывают оператор «не равно», но на самом деле это оператор «равен чему-то другому».<>
источник
Поскольку всем даны ответы, я хочу добавить немного больше. Я также столкнулся с той же проблемой.
Почему ваш запрос не удался? У тебя есть,
Это не даст вам ожидаемого результата, потому что из MySQL док
Акцент мой.
Решение
Для испытания на
NULL
, используйтеIS NULL
иIS NOT NULL
оператор.NULL
.NULL
.источник
Там также
<=>
оператор:Должно сработать. Приятно то, что
<=>
также может использоваться со значениями, отличными от NULL:SELECT NULL <=> NULL
доходность1
.SELECT 42 <=> 42
доходность1
также.Смотрите здесь: https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_equal-to
источник
Информация с http://w3schools.com/sql/sql_null_values.asp :
Так что в случае вашей проблемы:
источник
Была такая же проблема, где запрос:
не вернул никаких значений. Кажется, проблема с MyISAM, и тот же запрос к данным в InnoDB дал ожидаемые результаты.
Пошел с:
Вернули все ожидаемые результаты.
источник
источник
У меня была такая же проблема при преобразовании баз данных из Access в MySQL (использование vb.net для связи с базой данных).
Мне нужно было оценить, было ли поле (тип поля varchar (1)) нулевым.
Это утверждение сработало для моего сценария:
источник