MySQL 5.6令人困惑的字段值

时间:2019-03-25 03:06:42

标签: mysql

分析我表中的数据:

这是我的示例查询:

SELECT * from mytable where myid = 1;

结果:

enter image description here

我的问题是:

为什么此值不等于1并显示为1

无论如何,此值来自GUID

,该字段的DataType为char,长度为36

使用临时数据进行实际执行:

set @val = '1f0f69da-b508-412f-bf02-6b506f15a521';

SELECT val from
(SELECT @val as val) as a
where val = 1;

1 个答案:

答案 0 :(得分:1)

MySQL必要时隐式应用转换,

在这里,您将char列与int值进行比较,因此MySQL尝试将char列值转换为int,而将值与int进行比较,如下所示:

'1f0f69da-b508-412f-bf02-6b506f15a521' converted to 1

'2f0f69da-b508-412f-bf02-6b506f15a521' converted to 2

'102f0f69da-b508-412f-bf02-6b506f15a' converted to 102

'af0f69da-b508-412f-bf02-6b506f15a521' here it fails to convert to int.

所以在您的示例中

set @val = '1f0f69da-b508-412f-bf02-6b506f15a521';

SELECT val from
(SELECT @val as val) as a
where val = 1;

mysql转换为1,因此查询返回结果。

MySQL尝试将字符串转换为int,直到找到非数字为止。

Reference