我在MySQL上看到这个有点困惑
SELECT 1='1x';
给了我1个
尽管
SELECT 1='2x';
给我0(如预期的那样)
进行二进制比较时
SELECT CAST(1 AS BINARY)=CAST('1x' AS BINARY);
它给了我0(也是预期的)
问题:如何阻止MySQL表现得像这样?我希望'='充当100%二进制相等。我不希望MySQL假设或猜测我想要比较的内容。
答案 0 :(得分:4)
比较字符串和数字时,MySQL会自动进行转换。
因此字符串会转换为数字,并从左到右开始尝试从中生成一个数字。
所以
'1x' => 1
'x1' => 0 //because it does not start with a number on the left
你无法改变这种行为。而且你不应该比较不同的数据类型。所以这是你的错:)