Предложение where возвращает данные после передачи неизвестного строкового значения. Почему?

0
SELECT * FROM 'table_name' WHERE 'column_name' = "60dsfdsf"

В phpmyadmin, если запустить этот запрос, он будет извлекать значение column_name 60 form table_name.

Здесь column_name type - int и primary.

Я ожидал, что не найду никакой ценности, но column_name значение column_name 60

в чем причина этого?

Теги:
phpmyadmin

2 ответа

2
Лучший ответ

Ну, это MySQL, который отличает значение по типу. Если столбец имеет тип INT и переданное значение содержит строку с номером, она будет извлекать из нее номер.

Согласно типу-преобразованию-MySql

Когда оператор используется с операндами разных типов, происходит преобразование типов, чтобы сделать операнды совместимыми. Некоторые преобразования происходят неявно. Например, MySQL автоматически преобразует числа в строки по необходимости, и наоборот.

Так что в вашем случае,

SELECT * FROM table_name WHERE column_name = "60dsfdsf"

фактически преобразуется в

SELECT * FROM table_name WHERE column_name = "60"

РЕДАКТИРОВАТЬ:

если ваша строка начинается с номера, то MySql примет это число.

например. 60dsfdsf - 60

НО, если строка имеет алфавиты изначально, тогда результат будет

например. dsfdsf60 для MySQL - 0.

Поэтому будьте осторожны, так как это не будет одинаковым результатом для каждого случая. Лучше, прежде чем передавать значение, преобразовать или извлечь номер, а затем отправить его на запрос.

Надеюсь это поможет

1

Если я не ошибаюсь, он автоматически передает данные в требуемый тип. В этом случае он будет игнорировать последние символы и перейти с номерами от начала строки

Если вы начнете с алфавитного символа, вы увидите, что он не загрузит никакого значения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню