Почему MySQL запрос всегда возвращает все данные столбца из таблицы ?:Запрос всегда возвращает все данные
SELECT column
FROM table
WHERE column = "+"
Тип столбца VARCHAR.
Почему MySQL запрос всегда возвращает все данные столбца из таблицы ?:Запрос всегда возвращает все данные
SELECT column
FROM table
WHERE column = "+"
Тип столбца VARCHAR.
Ok, после уточнения вашего запроса, это немного яснее, что произошло. В MySQL +
является только числовым оператором, а не оператором конкатенации. Нечисловые строки всегда будут сбрасываться до нуля, поэтому, если вы попытаетесь «добавить» вместе две пустые строки (пары одинарных кавычек), вы эффективно выбираете 0 + 0
.
MySQL> SELECT 1 + 1, '' + '', '1abc' + 1;
+-------+---------+------------+
| 1 + 1 | '' + '' | '1abc' + 1 |
+-------+---------+------------+
| 2 | 0 | 2 |
+-------+---------+------------+
1 row in set, 1 warning (0.00 sec)
И так нечисловых строк, поданных к нулю, любой не-цифровая строка в столбце будет соответствовать условию эффективно
WHERE column = 0
Пример сравнения нуля до числового и нечисловой строки:
MySQL> SELECT 'abcd' = 0, '1234' = 0;
+------------+------------+
| 'abcd' = 0 | '1234' = 0 |
+------------+------------+
| 1 | 0 |
+------------+------------+
1 row in set, 1 warning (0.00 sec)
Да, я уже понимаю, но почему MySQL возвращает все данные столбца, если нет согласованных значений? –
@IgorKhromov Нет, он не возвращает все, если ни один не сопоставляется. Дело в том, что _all strings_, которые не являются числовыми, будут вычисляться до 0 при наборе в виде целых чисел. Когда вы сравниваете целое число «0» в предложении 'WHERE', все они отливаются от целых чисел, и все соответствуют 0. Если в вашем столбце были строки, такие как' 1a', они должны были бы отличить их от правильных целочисленных значений и _not_ совпадают с нулем. –
Спасибо, теперь все понятно! –
Поскольку вы сравниваете с 0
(целое число), значение столбца преобразуется в целое число перед сравнением. Все эти значения будут содержать 0
, если они не содержат строку, которая может быть указана на другое целочисленное значение (например, '1'
).
Чтобы решить эту проблему, попробуйте:
WHERE column = '0'
спасибо, я понимаю, что он не может сравните INT и VARCHAR, а column = 0 всегда TRUE. Спасибо всем, ребята !!! –
MySql на сравнении VARCHAR с целым числом, пытается бросить VARCHAR в целое число. И если строка не является числом, она по умолчанию добавляется в целое число 0 и, следовательно, возвращает true при сравнении с 0. Если бы был столбец, например, «123», он не был бы выбран.
MySQL будет отличать все нечисловые строки до нуля, а сравнение с целым нулем будет истинным. Опубликуйте образцы данных, и мы можем проверить это наверняка. –
SELECT '' + '' возвращает 0 –
возможный дубликат [Почему это результат \ 'select 'a' = 0; \' 1?] (Http://stackoverflow.com/questions/4300120/why-is- the-result-of-select-a-0-1) –