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
隐式转换为数字,并且由于值 123abc
或 123...
以 123
开头,它们是所有以 123
开头的值都转换为 123
和条件 returns TRUE
。
您可以看到此行为 here。
你要的是字符串比较
所以改为:
where `identifier` = '123...'
这样你就可以进行字符串比较了。
最近注意到一个有效的 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
隐式转换为数字,并且由于值 123abc
或 123...
以 123
开头,它们是所有以 123
开头的值都转换为 123
和条件 returns TRUE
。
您可以看到此行为 here。
你要的是字符串比较
所以改为:
where `identifier` = '123...'
这样你就可以进行字符串比较了。