Интерблог

Архив за Февраль 2012-го

Принцип неопределённости в MYSQL
Автор: Ognezmej. Опубликовано: 13 Февраля 2012

Допустим, у нас есть некая таблица table, в таблице некое поле field, поле имеет тип INT, ну, к примеру, 5 или 10, без разницы. Умолчание для него не определено (если само поле NOT NULL), или определено как 0. Заполним таблицу всевозможными записями, при этом не задавая поле field (или задавая его нулём). А теперь делаем запрос:

SELECT * FROM `table` WHERE `field`="любая херня, которая придёт в голову";

Как Вы думаете, сколько он найдёт записей? Ни одной? А вот и фигушки! Он найдёт все записи, где field не определён или ноль. Мало того, кавычки после `field`= играют здесь непростую и даже трагическую роль. Если кавычки убрать, то любая не-числовая херня будет, как оно и положено, выдавать ошибку MYSQL, а числовая будет правильно обрабатываться. С  кавычками правильно обрабатывается, опять же, только числовая херня. А неправильные данные даже ошибку не выдают. What is it means?

 

UPDATE:

It means неявное приведение типов. То же самое, что и PHP-шная функция intval(). Значение поля приводится к целочисленному, и, если первым символом является не цифра, то получаем ноль. Если же хоть одна цифра вначале, то значение приравнивается к этой цифре - и равенства с пустым полем не будет.

Соответственно, рекомендация заключать даже численные переменные в кавычки может иметь довольно непредсказуемые последствия. Поскольку, как там же говорилось, mysql всё равно преобразует их к нужному типу:) Но, разумеется, если всё делать аккуратно и всё знать заранее, проблем не будет. Знать бы, куда падать, соломки бы подстелил...

 

Метки: MYSQL, Кодинг

Популярные записи

Принцип неопределённости в РНР

Принцип неопределённости в MYSQL

Недолёт

А ещё AJAX нужен для...

Принцип неопределённости в PHP - праздник продолжается!

Эмуляция плавности в ActionScript.

Программная анимация в ActionScript

Анимация при наведении в ActionScript

Использование кодировки UTF-8

Буквицца

Архив записей  

2019

Янв  Фев  Мар  

2018

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2017

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2016

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2015

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2014

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2013

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2012

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2011

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2010

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2009

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек