SQL查询给出错误的结果

时间:2018-11-29 06:31:46

标签: mysql sql mysqli

执行的查询应该将story_id与提供的字符串匹配,但是当我执行查询时,它给我错误的结果。请参阅屏幕截图。

谢谢:)

enter image description here

2 个答案:

答案 0 :(得分:7)

story_id列的数据类型为INT(或数字)。

在这种情况下,MySQL会进行自动类型转换。因此,5bff82...被类型转换为5,因此您得到的行对应于story_id = 5

Type Conversion in Expression Evaluation

  

当运算符与不同类型的操作数一起使用时,请键入   进行转换以使操作数兼容。一些转换   隐式发生。例如,MySQL自动将字符串转换为   数字,反之亦然。

现在,理想情况下,您的应用程序代码应足够健壮以处理此输入。如果您希望输入仅是数字,那么在将其发送到MySQL服务器之前,您的应用程序代码可以对数据使用验证操作(以确保它只是一个数字,没有类型转换)。

另一种方法是将story_id显式转换为字符串数据类型,然后执行比较。但是,不推荐这种方法,因为这将无法利用索引。

SELECT * FROM story
WHERE (CAST story_id AS CHAR(12)) = '5bff82...'

如果运行上述查询,将不会获得任何结果。

答案 1 :(得分:0)

您也可以这样使用smth:

SELECT * FROM story
WHERE regexp_like(story_id,'^[1-5]{1}(.*)$');

对于任何以任何数字开头且不匹配任何字符的story_id,都将与story_id=5不匹配; AND(如果您明确希望将其与字符串匹配);