SQL-запрос дает неверные результаты - PullRequest
0 голосов
/ 29 ноября 2018

Выполненный запрос должен соответствовать story_id с предоставленной строкой, но когда я выполняю запрос, он дает мне неверный результат.Пожалуйста, обратитесь к скриншоту.

Спасибо:)

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

вы также можете использовать что-то вроде этого:

SELECT * FROM story
WHERE regexp_like(story_id,'^[1-5]{1}(.*)$');

для любых story_ids, начинающихся с любого числа и соответствующих любому номеру charatcers, после этого оно не будет совпадать с story_id=5;И если вы явно хотите сопоставить его со строкой;

0 голосов
/ 29 ноября 2018
В вашем случае столбец

story_id имеет тип данных INT (или числовой).

В этом случае MySQL выполняет автоматическое приведение типов.Таким образом, 5bff82... получает типизированное значение 5, и, таким образом, вы получаете строку, соответствующую story_id = 5

Преобразование типов в оценке выражений

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

Теперь, в идеале, код вашего приложения должен быть достаточно устойчивым для обработки этого ввода.Если вы ожидаете, что входные данные будут только числовыми, то код вашего приложения может использовать операции проверки данных (чтобы убедиться, что это только число без преобразования типов) перед отправкой его на сервер MySQL.

Другим способом будетявно указать тип story_id в виде строкового типа и затем выполнить сравнение.Однако это не рекомендуемый подход , так как он не сможет использовать индексирование.

SELECT * FROM story
WHERE (CAST story_id AS CHAR(12)) = '5bff82...'

Если вы выполните вышеуказанный запрос, вы не получите результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...