即使给定值不相同,MySQL也会找到匹配项

时间:2019-01-09 10:20:48

标签: mysql

我有一个名为accounts的MySQL表,其中存储了有关用户帐户的信息。当我希望获取任何特定用户的信息时,可以通过使用他们的帐户id来进行,并且我执行的查询通常如下:

SELECT * FROM `accounts` WHERE `id`="1"

并返回预期结果以及该特定帐户上的所有信息。
但是,我很好奇,为了测试,我决定在ID后面添加一些随机字符和符号。

SELECT * FROM `accounts` WHERE `id`="1dslkfjsd" 

我的问题是:为什么MySQL认为1dslkfjsd等于1

是因为该列的类型为int并剥离了所有非int的内容吗?

屏幕截图:


enter image description here


enter image description here

2 个答案:

答案 0 :(得分:1)

是,使用字符串作为整数会强制转换为整数列类型,等效于:

SELECT time, os_name, count(*) as nb_os_name, program, lastline, 
FROM table t
GROUP BY time, os_name, program, lastline

如果字符串的第一部分是有效整数,则将其用作返回值,否则您可能会得到0。

答案 1 :(得分:1)

当比较具有不同数据类型的字段时,将应用转换规则。

来自the documentation

  
      
  • 如果比较操作中的两个参数都是字符串,则将它们作为字符串进行比较。
  •   
  • 如果两个参数都是整数,则将它们作为整数进行比较。
  •   
  • [...]
  •   
  • 在所有其他情况下,将参数作为浮点数(实数)进行比较。
  •   

在您的用例中,发生的情况是1dslkfjsd在转换为数字时变为1