MySQL Обновить запрос, используя равно (=) и LIKE с alphanumeri c значение критерия - PullRequest
0 голосов
/ 20 апреля 2020

Недавно заметил, что рабочий запрос UPDATE больше не имеет тех же результатов, что и предложение where, содержащее alphanumeri c значений, начинающихся с цифры, оцените любую помощь.

UPDATE запрос:

UPDATE `user` SET last_name = 'newTest' where `identifier` = '123abc';

ВЫПУСК : этот запрос обновляет все записи с identifier, начинается с 123 ...

Исправлена ​​временная проблема с использованием LIKE (см. Ниже):

UPDATE `user` SET last_name = 'newTest' where `identifier` LIKE '123abc';

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

РЕДАКТИРОВАТЬ : запрос с проблемой, когда я обновляю другой идентификатор, имеющий точное число, предшествующее другим идентификаторам:

UPDATE `user` SET last_name = 'newTest' where `identifier` = 123;

Tech. используемые версии: php 7, mysql 5.6, RedBean 5, ОС Alpine 3.11

1 Ответ

1 голос
/ 20 апреля 2020

Проблема заключается в том, что вы сравниваете строковое значение и числовое значение c:

where `identifier` = 123

, поэтому Mysql выполняет неявное преобразование столбца identifier в числовое значение c, и поскольку значения 123abc или 123... начинаются с 123, все они преобразуются в 123, и условие возвращает TRUE для всех значений, начинающихся с 123. Вы можете увидеть это поведение здесь . То, что вы хотите, это строка сравнение. Поэтому измените на:

where `identifier` = '123...'

Таким образом, вы сделаете сравнение строк.

...