Чем отличается NULL от 0 ? В поле стоит 0, но не в зпросе обрабатывается только NULL

kif0rt

Новичок
Чем отличается NULL от 0 ? В поле стоит 0, но не в зпросе обрабатывается только NULL

Запутались наверное моим вопросом ... объясняю :

Есть поле в итаблице :

`field` smallint(1) unsigned NOT NULL default '0'

Т.е. по умолчанию в это поле заносится 0 , но не NULL. Так вроде и есть .. в phpAdmin видны нули ...

Но как только я делаю запрос вида :

SELECT FROM table WHERE field='0' то на экран выводятся не только те записис с полем со значением 0, а вообще все записи независимо от того 0 в этом поле или нет ....

Но если сделать SELECT FROM table WHERE field='NULL' то всё отлично. Выводятся все "нулевые" записи.

У меня один вариант почему так происходит : 0 или другую цифру я ввожу в поле type=text и после submit'а посылаетсчя запрос в базу. Наверно 0 не отсыалается и в этом вся беда ?! Кто что думает ? Спасибо.
 

kif0rt

Новичок
Автор оригинала: sage
в пхпмайадмин запрос
[sql]SELECT * FROM table WHERE field='0'[/sql] выполнял?

а проверить?
PHP:
print_r($_POST);
Проверил. Отсылается. ГНаверное дело в кавычках.

-~{}~ 29.01.07 03:32:

Автор оригинала: Krishna
кавычки убери

-~{}~ 29.01.07 03:25:


тоже
Кавычки пробовал убирать в запросе - не помогло. Но наверное надо убрать в default ... Щас попробую

-~{}~ 29.01.07 03:44:

default '0' пробовал поменять на default 0. phpAdmin всё равно по ходу подставляет кавычки. Значит не в кавычках дело получается ...
 

Vallar_ultra

Любитель выпить :)
Krishna
какие нафиг кавычки? default '0' ЭКВИВАЛЕНТНО default 0

kif0rt
Погодь, выполни запрос с null из консоли и посмотри что он тебе вернёт.
 

kif0rt

Новичок
Фух .. решаил проблему. Я просто проверял все поля на "пустоту" и если оно пустое, то в запрос не отправляется ничего. Т.е. я писал

if (empty($field))
тогда ничего не делай ...

А дело в том, что когда в поле содержится 0, то оно считается пустым вот и не работал запрос как надо ...

Сделал так :

if($field!=NULL)
делай ....

Щас всё работает. Всем спасибо за ответы.
 

Vallar_ultra

Любитель выпить :)
Krishna

В запросе тоже не надо. mySQL инты в кавычках понимает прекрасно, а вот если этот нолик как пишет топик-стартер приползает из реквеста, то наоборот лучше оставить ИМХО. от греха по-дальше.
 

Апельсин

Оранжевое создание
> mySQL инты в кавычках понимает прекрасно

понимать то понимает, но воспринимает как строку, которую потом конвертирует в int. Это может привести к тому что индексы у вас использовать не будут.
 

Апельсин

Оранжевое создание
> И по каким дням может привести?

В общем случае это вообще не гарантируется что при конвертации типов будет использоваться индекс. В частном случае зависит от версии и от того из какого типа в какой происходит конвертация.
 
Сверху