考虑以下查询
SELECT
('foo' + 1 - 1) = 'foo',
('foo' + 1 - 1),
'foo'
令我惊讶的是它返回1, 0, 'foo'
那么0
如何等于foo
?
以及如何声明('foo' + 1 - 1) = 'foo'
将返回false(0)?
答案 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'