MySQL:使用字符串参数搜索数字列

来自工作项目中的代码,实际传参是个枚举,查询的时候,打印sql参数变为了枚举的字面量。对于在用字符串类型去查number时,mysql会把非数字开头的字符串转为0。实际查出来的结果正好满足业务场景,导致缺陷迟迟未被发现。

下面转载自网络。
假设我们在表’order’中有一条id = 1的记录.这个查询:

1
SELECT * FROM 'orders' WHERE id = 'abc1'

不会返回提到的记录.但是这个查询:

1
SELECT * FROM 'orders' WHERE id = '1abc'

将返回id = 1的记录.这是因为当MySQL将字符串转换为数字’abc1’变为0,但’1abc’变为1.有一种很好的方法可以使MySQL严格搜索具有来自查询的id的记录,即不返回id = 1的记录提到的情况?

最佳答案
怎么样使用:

1
SELECT * FROM 'orders' WHERE id LIKE '1abc' COLLATE utf8_bin

甚至

1
SELECT * FROM 'orders' WHERE STRCMP(id, '1abc') = 0;

From

评论

:D 一言句子获取中...