作者:会长大的幸福7007 | 来源:互联网 | 2022-11-27 20:03
执行的查询应该与story_id匹配提供的字符串,但是当我执行查询时,它给我一个错误的结果.请参阅屏幕截图.
谢谢 :)
1> Madhur Bhaiy..:
story_id
您的案例中的列是INT
(或数字)数据类型.
在这种情况下,MySQL会自动进行类型转换.因此,5bff82...
得到typecasted 5
,因此你得到对应于story_id
= 5 的行
表达式评估中的类型转换
当操作符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容.某些转换是隐式发生的.例如,MySQL会根据需要自动将字符串转换为数字,反之亦然.
现在,理想情况下,您的应用程序代码应该足够强大以处理此输入.如果您希望输入只是数字,那么您的应用程序代码可以在将数据发送到MySQL服务器之前对数据使用验证操作(以确保它只是一个数字,而不进行类型转换).
另一种方法是显式地将类型转换story_id
为字符串数据类型,然后执行比较.但是,这不是推荐的方法,因为这将无法使用索引.
SELECT * FROM story
WHERE (CAST story_id AS CHAR(12)) = '5bff82...'
如果您运行上述查询,则不会得到任何结果.