我有一个名为accounts
的MySQL表,其中存储了有关用户帐户的信息。当我希望获取任何特定用户的信息时,可以通过使用他们的帐户id
来进行,并且我执行的查询通常如下:
SELECT * FROM `accounts` WHERE `id`="1"
并返回预期结果以及该特定帐户上的所有信息。
但是,我很好奇,为了测试,我决定在ID后面添加一些随机字符和符号。
SELECT * FROM `accounts` WHERE `id`="1dslkfjsd"
我的问题是:为什么MySQL认为1dslkfjsd
等于1
?
是因为该列的类型为int
并剥离了所有非int
的内容吗?
屏幕截图:
答案 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)
当比较具有不同数据类型的字段时,将应用转换规则。
- 如果比较操作中的两个参数都是字符串,则将它们作为字符串进行比较。
- 如果两个参数都是整数,则将它们作为整数进行比较。
- [...]
- 在所有其他情况下,将参数作为浮点数(实数)进行比较。
在您的用例中,发生的情况是1dslkfjsd
在转换为数字时变为1
。