执行的查询应该与提供的字符串匹配,但是当我执行查询时,它给了我一个错误的结果。请参考截图。
3qpi33ja1#
story_id 你的例子中的列是 INT (或数字)数据类型。在这种情况下,mysql执行自动类型转换。所以, 5bff82... 键入到 5 这样就得到了对应于 story_id = 5表达式求值中的类型转换当运算符与不同类型的操作数一起使用时,会进行类型转换以使操作数兼容。有些转换是隐式进行的。例如,mysql会根据需要自动将字符串转换为数字,反之亦然。现在,理想情况下,您的应用程序代码应该足够健壮,能够处理这些输入。如果您希望输入仅为数字,那么您的应用程序代码可以在将数据发送到mysql服务器之前对数据使用验证操作(以确保它只是一个数字,而不需要类型转换)。另一种方法是显式类型转换 story_id 作为字符串数据类型,然后执行比较。但是,这不是推荐的方法,因为这将无法利用索引。
story_id
INT
5bff82...
5
SELECT * FROM story WHERE (CAST story_id AS CHAR(12)) = '5bff82...'
如果运行上述查询,将不会得到任何结果。
w1jd8yoj2#
您也可以这样使用smth:
SELECT * FROM story WHERE regexp_like(story_id,'^[1-5]{1}(.*)$');
对于任何以任何数字开头并匹配任何字符的故事,在这之后它将不匹配 story_id=5 ; 如果你显式地想用一个字符串来匹配它;
story_id=5
2条答案
按热度按时间3qpi33ja1#
story_id
你的例子中的列是INT
(或数字)数据类型。在这种情况下,mysql执行自动类型转换。所以,
5bff82...
键入到5
这样就得到了对应于story_id
= 5表达式求值中的类型转换
当运算符与不同类型的操作数一起使用时,会进行类型转换以使操作数兼容。有些转换是隐式进行的。例如,mysql会根据需要自动将字符串转换为数字,反之亦然。
现在,理想情况下,您的应用程序代码应该足够健壮,能够处理这些输入。如果您希望输入仅为数字,那么您的应用程序代码可以在将数据发送到mysql服务器之前对数据使用验证操作(以确保它只是一个数字,而不需要类型转换)。
另一种方法是显式类型转换
story_id
作为字符串数据类型,然后执行比较。但是,这不是推荐的方法,因为这将无法利用索引。如果运行上述查询,将不会得到任何结果。
w1jd8yoj2#
您也可以这样使用smth:
对于任何以任何数字开头并匹配任何字符的故事,在这之后它将不匹配
story_id=5
; 如果你显式地想用一个字符串来匹配它;