如何在mysql中进行精确比较?

时间:2015-10-30 15:24:32

标签: mysql

考虑以下查询

SELECT 
    ('foo' + 1 - 1) = 'foo',
    ('foo' + 1 - 1),
    'foo'

令我惊讶的是它返回1, 0, 'foo'

那么0如何等于foo

以及如何声明('foo' + 1 - 1) = 'foo'将返回false(0)?

2 个答案:

答案 0 :(得分:1)

答案在mysql文档的Type Conversion in Expression Evaluation部分中描述。

由于表达式中运算符的数量和类型,

('foo'+ 1 - 1)表达式被计算为数字。在此上下文中,字符串'foo'被解释为0.因此,上述表达式转换为0 + 1-1 =>然后,将此数字与字符串'foo'进行比较。由于其中一个操作数是整数,另一个是字符串,因此比较是作为浮点数完成的。在此上下文中,字符串'foo'被转换为0. 0 = 0为真,因此结果为1。

答案 1 :(得分:0)

我刚找到一个解决方案

SELECT 
    binary ('foo' + 1 - 1) = binary 'foo',
    ('foo' + 1 - 1),
    'foo'