【问题标题】:SQL Query giving wrong resultsSQL 查询给出错误的结果
【发布时间】:2018-11-29 06:31:45
【问题描述】:

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

【问题讨论】:

  • 你可以展示你的示例表

标签: mysql sql mariadb


【解决方案1】:

在您的情况下,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...'

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

【讨论】:

    【解决方案2】:

    你也可以这样使用:

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

    对于任何以任何数字开头并匹配任何字符之后的story_ids,它都不会与story_id=5匹配; 并且如果您明确想将其与字符串匹配;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多