barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

пятница, 1 апреля 2011 г.

Сравнение годов в MySQL

Наткнулся тут на очень опасную особенность MySQL (может правда это свойственно не только ей и вообще является нормальным поведением, но для меня оно стало неожиданным):

В одной из таблиц базы есть поле типа YEAR. Так получилось, что в него попал год "0000", и из админки (написанной на php) я решил его удалить. Вводимый в поле год для удаления intval`ился на стороне сервера, т.е. моё желание удалить год "0000" превратилось в желание удалить год "0". Какое же было мое удивление, когда вместо одной строки, из БД удалилось 800+ строк, и причем строка с годом "0000" осталась на месте. А удалились строки с 2000 годом.

Действительно, SELECT * FROM `table` WHERE `year` = '0' выдает строки с 2000 годом, а ни как не с нулевым. Это связано с тем, что при проведении выборок или присваиваний значений полям числа 0-69 преобразуются в 2000-2069, а 70-99 - в 1970-1999.

Комментариев нет:

Отправить комментарий