我得到了一个看起来像下面的查询.查询应查询等于的example
位置的记录.比较是我所期待的.value
3
value = '3 value'
value = 3
为什么value = '3 value'
返回相同的记录value = 3
?
SELECT * FROM test.example WHERE value = '3 value';
value
是类型INT
,我希望得到一个错误或至少是错误的结果.虽然,我得到了正确的结果(取决于你如何定义'正确')(值为3的结果).
表中的数据(id,name,value):
1 Example 1 1 2 Example 2 2 3 Example 3 3 4 Example 4 3 5 Example 5 2
Luca Rainone.. 5
来自doc
当操作符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容.某些转换是隐式发生的.例如,MySQL会根据需要自动将数字转换为字符串,反之亦然.
然后
select "3 value" = 3
它返回1
是因为
select CAST("3 value" AS SIGNED)
回报 3
来自doc
当操作符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容.某些转换是隐式发生的.例如,MySQL会根据需要自动将数字转换为字符串,反之亦然.
然后
select "3 value" = 3
它返回1
是因为
select CAST("3 value" AS SIGNED)
回报 3