我得到了一个看起来像下面的查询。查询应查询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
答案 0 :(得分:5)
来自doc
当运算符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。某些转换是隐式发生的。例如,MySQL会根据需要自动将数字转换为字符串,反之亦然。
然后
select "3 value" = 3
它返回1
,因为
select CAST("3 value" AS SIGNED)
返回3
答案 1 :(得分:0)
如果您检查了查询输出的警告,您会看到如下内容:
+---------+------+---------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: '3 value' |
+---------+------+---------------------------------------------+
MySQL将截断该值,只留下整数。