为什么如果我在where条件的末尾运行带有乱码的查询,它会错误地返回结果。 示例:
SELECT * FROM contractor_table WHERE contractorID = '97sd'
我应该得到ID为97的行,而我应该没有结果。
答案 0 :(得分:1)
这里发生的是,您正在将contractorID
列(它是整数或其他数字类型)与字符串文字97sd
进行比较。这没有任何意义,因此MySQL根据其强制转换规则,尝试首先将97sd
强制转换为整数。考虑以下查询的结果:
SELECT CAST('97sd' AS unsigned);
实际上,这仅输出97
(整数)。因此,在实践中,这意味着MySQL会忽略以整数开头的字符串文字末尾的“乱码”。
但是,此处的最佳实践是始终将列与正确的文字类型进行比较。因此,请始终使用以下版本,以获得最佳效果:
SELECT * FROM contractor_table WHERE contractorID = 97;
答案 1 :(得分:0)
当您将列类型为int或其他数字时,如果将其转换为varchar会发生这种情况,因为它将无法重新调整输出