【问题标题】:Why mysql compare "IN" as a like为什么mysql比较“IN”
【发布时间】:2017-06-09 08:45:03
【问题描述】:

我有一个包含以下数据的表格

表事务

trasaction_id
886
456
654_asd
898_ASDF

如果我用这句话

SELECT trasaction_id from transactions where transaction_id IN (886,654)

我希望结果是886

但是mysql正在返回886,654_ASDF

为什么在该查询中返回654_ASDF

【问题讨论】:

  • trasaction_id [sic] 列的类型是什么?
  • '654_asd' 被强制转换为 int。 SELECT 654 = '654_asd' == 1

标签: mysql sql-in


【解决方案1】:

这是因为transaction_id 是一个字符串,但您的比较值是数字。因此,transaction_id 正在使用“静默转换”转换为数字。这意味着不会报告错误。

转换并没有真正使用like。它通过将字符串的前导字符转换为数字(如果它们看起来像数字)继续进行。后续字符将被忽略。

所以,只要使用正确的类型:

SELECT trasaction_id 
FROM transactions 
WHERE transaction_id IN ('886', '654');

【讨论】:

    猜你喜欢
    • 2020-09-15
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2012-02-09
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多