为什么 mysql 比较 "IN" 一样

Why mysql compare "IN" as a like

我有一个 table 具有以下数据

Table 笔交易

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

发生这种情况是因为 transaction_id 是一个字符串,但您的比较值是数字。因此,transaction_id 正在使用 "silent conversion" 转换为数字。这意味着不会报告错误。

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

因此,只需使用正确的类型:

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