SQL忽略where条件中的字符串

时间:2019-03-07 05:45:24

标签: mysql

为什么如果我在where条件的末尾运行带有乱码的查询,它会错误地返回结果。 示例:

SELECT * FROM contractor_table WHERE contractorID = '97sd'

我应该得到ID为97的行,而我应该没有结果。

2 个答案:

答案 0 :(得分:1)

这里发生的是,您正在将contractorID列(它是整数或其他数字类型)与字符串文字97sd进行比较。这没有任何意义,因此MySQL根据其强制转换规则,尝试首先将97sd强制转换为整数。考虑以下查询的结果:

SELECT CAST('97sd' AS unsigned);

实际上,这仅输出97(整数)。因此,在实践中,这意味着MySQL会忽略以整数开头的字符串文字末尾的“乱码”。

但是,此处的最佳实践是始终将列与正确的文字类型进行比较。因此,请始终使用以下版本,以获得最佳效果:

SELECT * FROM contractor_table WHERE contractorID = 97;

答案 1 :(得分:0)

当您将列类型为int或其他数字时,如果将其转换为varchar会发生这种情况,因为它将无法重新调整输出