SELECT * FROM `table_name` WHERE `column_name` = "60dsfdsf"
在phpmyadmin中,如果运行此查询,则会从column_name
检索table_name
值60。
此处column_name
类型为int和primary。
我希望找不到任何价值,但它会检索column_name
值60
背后的原因是什么?
答案 0 :(得分:2)
嗯,这是根据类型转换值的MySQL。如果列的类型为INT,并且传递的值包含具有数字的字符串,则它将从中提取数字。
当运算符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。某些转换是隐式发生的。例如,MySQL会根据需要自动将数字转换为字符串,反之亦然。
所以在你的情况下,
SELECT * FROM
table_name WHERE
column_name = "60dsfdsf"
实际上转换为
SELECT * FROM
表名WHERE
{COLUMN_NAME {1}}
编辑:
如果您的字符串以数字开头,那么MySql将采用该数字。
例如。 = "60"
为60dsfdsf
但是,如果字符串最初有字母,那么结果将是
例如。对于MySQL,60
为dsfdsf60
。
所以要小心,因为每种情况都不会有相同的结果。更好的方法,在传递值之前转换或提取数字,然后将其发送到查询。
希望这有帮助