首页 > 解决方案 > MySQL 5.6 混淆字段值

问题描述

分析我的表中的数据:

这是我的示例查询:

SELECT * from mytable where myid = 1;

结果:

在此处输入图像描述

我的问题是:

为什么这个值不等于1显示并认为是1

无论如何,这个值来自 GUID

该字段的字段DataTypechar长度为36

使用临时数据实际执行:

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

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

标签: mysql

解决方案


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,直到找到非数字。

参考


推荐阅读