Mysql 查询返回错误结果

时间:2021-04-07 00:23:33

标签: mysql

我有一个产品表,其中 product_id 字段是一个自动 ID 和一个整数。 当我搜索时:

SELECT * FROM `products` WHERE product_id = '73N716507Y5928128'

它实际上返回 product_id 为 73 的行。我可能是编程新手,但我知道 73 != 73N716507Y5928128。

我该怎么做才能解决这个问题? 顺便说一句,此查询的原因是我正在搜索多个表和多个字段以获取搜索词并使用逻辑来确定用户正在搜索的内容...

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

在mysql中,当你比较(=, <, >, <=, >=, <=>) 一个数字字段和一个字符字段时,字符字段首先转换为数字,不考虑任何尾随的非数字字符。

大概您希望 product_id= 部分保持不变以利用索引。您可以添加一个额外的条件来测试输入是否实际上是一个数字:

SELECT * FROM `products`
WHERE product_id = '73N716507Y5928128'
AND CONCAT(0+'73N716507Y5928128')='73N716507Y5928128';

答案 1 :(得分:0)

您的业务逻辑应确保在 where clause 中只传递整数。但是,您也可以尝试以下操作,它将解决问题。但是如果 products 表有数百万条记录,由于全表扫描,这不是一个好主意。但如果表中有 10K 或更少的产品,则完全扫描将根本不重要。

SELECT * FROM `products` WHERE binary(product_id) = '73N716507Y5928128'
相关问题