错误的查询与正确的结果

时间:2013-12-04 10:24:46

标签: mysql sql

我得到了一个看起来像下面的查询。查询应查询examplevalue等于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

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将截断该值,只留下整数。