答案 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(如果您明确希望将其与字符串匹配);