gpt4 book ai didi

mysql - 为什么MySQL "WHERE"子句近似: retrieves values even the condition is not met

转载 作者:行者123 更新时间:2023-11-29 03:17:21 25 4
gpt4 key购买 nike

我有一个主键是数字且自动递增的表。

当我运行如下查询时:

SELECT * FROM my_table where id = '1a';

查询返回主键设置为“1”的行。

我不知道这种行为,是否可以阻止它?我期望此 WHERE 子句不会检索任何内容,因为 id 是“1”而不是“1a”。它的行为就像一个 LIKE 子句。

最佳答案

MySQL 在与 int 列进行比较时将 String 文字隐式转换为 int。

您应该真正修复您的应用程序代码(例如:PHP),并在查询中使用它们之前正确地类型转换为 (int)。理想情况下,您的应用程序不应该输入字符串值来与整数字段进行比较。

现在,如果您无法控制输入值,一种方法是检查该值是否为数字,并相应地使用它进行比较。改编 sargable来自 https://dba.stackexchange.com/q/89760/160363 的方法

SELECT * FROM my_table 
WHERE id = CASE WHEN CONCAT('','1a'*1) = '1a' THEN '1a' ELSE NULL END;

关于mysql - 为什么MySQL "WHERE"子句近似: retrieves values even the condition is not met,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53134841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com