【发布时间】:2018-11-29 06:31:45
【问题描述】:
【问题讨论】:
-
你可以展示你的示例表
【问题讨论】:
在您的情况下,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...'
如果您运行上述查询,您将不会得到任何结果。
【讨论】:
你也可以这样使用:
SELECT * FROM story
WHERE regexp_like(story_id,'^[1-5]{1}(.*)$');
对于任何以任何数字开头并匹配任何字符之后的story_ids,它都不会与story_id=5匹配;
并且如果您明确想将其与字符串匹配;
【讨论】: