mysql - 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 在必要时应用隐式转换,
在这里,您将 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,直到找到非数字。
推荐阅读
- angular - 检查已加载的嵌套组件
- asp.net - 在 docker 中安装 .net framework 4.7.2
- laravel - Laravel - PHPUnit 多步测试
- jquery - 使用 django ajax jquery 提交一个文件不起作用的表单
- java - Selenium InternetExplorer 11 - 连续警报 - 第二个警报上的文本为空
- c++ - 是否可以计算任意 std::regex 对象中的捕获组数?
- python - 如何用最后一个条目替换空字典条目
- java - Hadoop 进程的 jps 命令
- javascript - 将控制台输出行上的链接重定向到包装函数的被调用者
- sql - 计算加权平均购买价格(带重置的交易表)