sql查询结果错误

0ejtzxu1  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(214)

执行的查询应该与提供的字符串匹配,但是当我执行查询时,它给了我一个错误的结果。请参考截图。

3qpi33ja

3qpi33ja1#

story_id 你的例子中的列是 INT (或数字)数据类型。
在这种情况下,mysql执行自动类型转换。所以, 5bff82... 键入到 5 这样就得到了对应于 story_id = 5
表达式求值中的类型转换
当运算符与不同类型的操作数一起使用时,会进行类型转换以使操作数兼容。有些转换是隐式进行的。例如,mysql会根据需要自动将字符串转换为数字,反之亦然。
现在,理想情况下,您的应用程序代码应该足够健壮,能够处理这些输入。如果您希望输入仅为数字,那么您的应用程序代码可以在将数据发送到mysql服务器之前对数据使用验证操作(以确保它只是一个数字,而不需要类型转换)。
另一种方法是显式类型转换 story_id 作为字符串数据类型,然后执行比较。但是,这不是推荐的方法,因为这将无法利用索引。

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

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

w1jd8yoj

w1jd8yoj2#

您也可以这样使用smth:

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

对于任何以任何数字开头并匹配任何字符的故事,在这之后它将不匹配 story_id=5 ; 如果你显式地想用一个字符串来匹配它;

相关问题