分析我表中的数据:
这是我的示例查询:
SELECT * from mytable where myid = 1;
结果:
我的问题是:
为什么此值不等于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;
答案 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,直到找到非数字为止。