MySQL 使用等号 (=) 和 LIKE 以及字母数字条件值来更新查询

MySQL Update query using equals (=) and LIKE with alphanumeric criteria value

最近注意到一个有效的 UPDATE 查询与包含以数字开头的字母数字值的 where 子句不再有相同的结果,感谢您的帮助。

UPDATE查询:

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

ISSUE:此查询更新了所有以 identifier 开头且以 123...

开头的记录

使用 LIKE(见下文)临时解决了这个问题:

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

但担心我的代码中还有一些其他类似情况可能会导致客户无法接受的数据丢失。

编辑: 问题的查询是当我更新另一个标识符时,该标识符具有领先于其他标识符的确切数字:

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

科技。使用的版本:php 7、mysql 5.6、RedBean 5、OS Alpine 3.11

问题是您比较字符串值和数值:

where `identifier` = 123

so Mysql 将列 identifier 隐式转换为数字,并且由于值 123abc123...123 开头,它们是所有以 123 开头的值都转换为 123 和条件 returns TRUE
您可以看到此行为 here
你要的是字符串比较
所以改为:

where `identifier` = '123...'

这样你就可以进行字符串比较了。