数据库MySQL基础入门之MySQL隐式转换
一、问题描述rootmysqldb 22:12: [xucl] show create table t1\G*************************** 1. row ***************************Table: t1Create Table: CREATE TABLE t1 (id varchar(255) DEFAULT NULL) ENGINEInnoDB DEFAULT CHARSETutf81 row in set (0.00 sec)rootmysqldb 22:19: [xucl] select * from t1;--------------------| id |--------------------| 204027026112927605 || 204027026112927603 || 2040270261129276 || 2040270261129275 || 100 || 101 |--------------------6 rows in set (0.00 sec)奇怪的现象rootmysqldb 22:19: [xucl] select * from t1 where id204027026112927603;--------------------| id |--------------------| 204027026112927605 || 204027026112927603 |--------------------2 rows in set (0.00 sec)640?wx_fmtjpeg什么鬼明明查的是204027026112927603为什么204027026112927605也出来了源码解释堆栈调用关系如下所示其中JOIN::exec()是执行的入口Arg_comparator::compare_real()是进行等值判断的函数其定义如下int Arg_comparator::compare_real(){/*Fix yet another manifestation of Bug#2338. Volatile will instructgcc to flush double values out of 80-bit Intel FPU registers beforeperforming the comparison.*/volatile double val1, val2;val1 (*a)-val_real();if (!(*a)-null_value){val2 (*b)-val_real();if (!(*b)-null_value){if (set_null)owner-null_value 0;if (val1 val2) return -1;if (val1 val2) return 0;return 1;}}if (set_null)owner-null_value 1;return -1;}比较步骤如下图所示逐行读取t1表的id列放入val1而常量204027026112927603存在于cache中类型为double类型2.0402702611292762E17所以到这里传值给val2后val22.0402702611292762E17。当扫描到第一行时204027026112927605转成doule的值为2.0402702611292762e17等式成立判定为符合条件的行继续往下扫描同理204027026112927603也同样符合如何检测string类型的数字转成doule类型是否溢出呢?这里经过测试当数字超过16位以后转成double类型就已经不准确了例如20402702611292711会表示成20402702611292712如图中val1MySQL string转成double的定义函数如下{char buf[DTOA_BUFF_SIZE];double res;DBUG_ASSERT(end ! NULL ((str ! NULL *end ! NULL) ||(str NULL *end NULL)) error ! NULL);res my_strtod_int(str, end, error, buf, sizeof(buf));return (*error 0) ? res : (res 0 ? -DBL_MAX : DBL_MAX);}真正转换函数my_strtod_int位置在dtoa.c太复杂了简单贴个注释吧/*strtod for IEEE--arithmetic machines.This strtod returns a nearest machine number to the input decimalstring (or sets errno to EOVERFLOW). Ties are broken by the IEEE round-evenrule.Inspired loosely by William D. Clingers paper How to Read FloatingPoint Numbers Accurately [Proc. ACM SIGPLAN 90, pp. 92-101].Modifications:1. We only require IEEE (not IEEE double-extended).2. We get by with floating-point arithmetic in a case thatClinger missed -- when were computing d * 10^nfor a small integer d and the integer n is not toomuch larger than 22 (the maximum integer k for whichwe can represent 10^k exactly), we may be able tocompute (d*10^k) * 10^(e-k) with just one roundoff.3. Rather than a bit-at-a-time adjustment of the binaryresult in the hard case, we use floating-pointarithmetic to determine the adjustment to withinone bit; only in really hard cases do we need tocompute a second residual.4. Because of 3., we dont need a large table of powers of 10for ten-to-e (just some small tables, e.g. of 10^kfor 0 k 22).*/既然是这样我们测试下没有溢出的案例rootmysqldb 23:30: [xucl] select * from t1 where id2040270261129276;------------------| id |------------------| 2040270261129276 |------------------1 row in set (0.00 sec)rootmysqldb 23:30: [xucl] select * from t1 where id101;------| id |------| 101 |------1 row in set (0.00 sec)结果符合预期而在本例中正确的写法应当是rootmysqldb 22:19: [xucl] select * from t1 where id204027026112927603;--------------------| id |--------------------| 204027026112927603 |--------------------1 row in set (0.01 sec)三、结论避免发生隐式类型转换隐式转换的类型主要有字段类型不一致、in参数包含多个类型、字符集类型或校对规则不一致等隐式类型转换可能导致无法使用索引、查询结果不准确等因此在使用时必须仔细甄别数字类型的建议在字段定义时就定义为int或者bigint表关联时关联字段必须保持类型、字符集、校对规则都一致文章来源网络 版权归原作者所有上文内容不用于商业目的如涉及知识产权问题请权利人联系小编我们将立即处理

相关新闻

LikeShop 开源商城 v3.5.1 发布:PC 商城正式上线,商城全端能力再进一步!

LikeShop 开源商城 v3.5.1 发布:PC 商城正式上线,商城全端能力再进一步!

这一次更新,不只是一次常规版本迭代,更是补齐了开源商城生态中非常重要的一块拼图——PC 商城正式上线。 对于很多企业来说,一个真正成熟的商城系统,不应该只服务于移动端,而应该同时覆盖 PC、H5、小程序、App 等多个…

2026/7/29 18:50:15阅读更多 →
私有属性及构造方法的简单应用

私有属性及构造方法的简单应用

今天跟大家来讲解一个重要却并不复杂的知识点:私有属性及构造方法的简单应用。然后呢我主要还是通过一个简单的例子来讲解。我们还是通过定义一个简单的学生类(属性:姓名,年龄)和一个方法类来说明。学生类的设计思路是…

2026/7/29 18:50:15阅读更多 →
Vibe Coding 时代,Vue 真的“消失”了吗?

Vibe Coding 时代,Vue 真的“消失”了吗?

最近技术圈里有个词特别火——Vibe Coding。这个词由 OpenAI 联合创始人 Andrej Karpathy 提出,被《柯林斯词典》评为 2025 年度词汇。简单说就是用自然语言描述需求,AI 直接生成完整可运行的代码,开发者几乎不用亲手写代码,只管“…

2026/7/29 18:50:15阅读更多 →
宠物购物社交系统哪家靠谱,用户动态图文轻量化存储方案

宠物购物社交系统哪家靠谱,用户动态图文轻量化存储方案

宠物购物社交系统哪家靠谱,用户动态图文轻量化存储方案宠物购物社交系统融合了用户UGC动态分享、萌宠图文种草、社交互动、宠物用品购物转化等核心功能,是当下宠物垂直领域主流的流量变现载体。和普通图文社交平台不同,宠物社交场景的用户动态…

2026/7/29 19:59:29阅读更多 →
宠物商城托运一体化搭建,宠物档案绑定商品物流全流程

宠物商城托运一体化搭建,宠物档案绑定商品物流全流程

宠物商城托运一体化搭建,宠物档案绑定商品物流全流程当下宠物服务类小程序与平台逐步从单一用品售卖、单一托运服务,转向商城购物、活体托运、宠物档案管理一体化的综合运营模式。很多宠物平台在实际搭建中,普遍存在宠物档案、商城订单、托运…

2026/7/29 19:59:29阅读更多 →
如何快速将B站m4s缓存无损转换为MP4:m4s-converter完整使用指南

如何快速将B站m4s缓存无损转换为MP4:m4s-converter完整使用指南

如何快速将B站m4s缓存无损转换为MP4:m4s-converter完整使用指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过B站…

2026/7/29 19:59:29阅读更多 →
物联网设备电源管理:锂亚电池动态阻抗优化方案

物联网设备电源管理:锂亚电池动态阻抗优化方案

1. 项目背景与核心挑战在物联网终端设备和便携式医疗设备领域,不可充电的初级电池(如锂亚硫酰氯电池)因其高能量密度和超长待机特性成为首选电源方案。但这类电池存在一个鲜为人知的致命缺陷:当负载电流出现突发性脉冲时&#xff…

2026/7/29 19:59:29阅读更多 →
Matcha-TTS终极指南:用流匹配技术实现秒级语音合成

Matcha-TTS终极指南:用流匹配技术实现秒级语音合成

Matcha-TTS终极指南:用流匹配技术实现秒级语音合成 【免费下载链接】Matcha-TTS [ICASSP 2024] 🍵 Matcha-TTS: A fast TTS architecture with conditional flow matching 项目地址: https://gitcode.com/gh_mirrors/ma/Matcha-TTS 想在几分钟内将…

2026/7/29 19:59:29阅读更多 →
HarmonyOS应用实战-启示散页-51-崩溃后别让上次操作消失:用 LastAction 账本辅助恢复入口

HarmonyOS应用实战-启示散页-51-崩溃后别让上次操作消失:用 LastAction 账本辅助恢复入口

HarmonyOS 应用实战 51:崩溃后别让上次操作消失,用最小账本恢复入口而不重复写入 用户在“答案之书”里导入题库、编辑内容或进入抽取动画时,系统可能因为内存回收、闪退或强制关闭而中断。最危险的处理方式不是没有恢复,而是把整…

2026/7/29 19:57:29阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/29 14:26:42阅读更多 →