数据库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表关联时关联字段必须保持类型、字符集、校对规则都一致文章来源网络 版权归原作者所有上文内容不用于商业目的如涉及知识产权问题请权利人联系小编我们将立即处理

相关新闻

API测试用例生成:人工写1天,AI 5分钟搞定?Taotoken平台实测3类方案的覆盖率陷阱

API测试用例生成:人工写1天,AI 5分钟搞定?Taotoken平台实测3类方案的覆盖率陷阱

AI时代测试用例生成的革命性实践:从人工到智能的完整转型指南 上周我在生产环境中直接部署了由GPT-5.4生成的测试用例,结果因漏测一个边界条件导致线上故障——这次教训促使我在Taotoken平台开展了为期两周的系统性对比实验,全面评估人工、模…

2026/7/29 18:49:00 阅读更多 →
本地AI对话系统搭建:Ollama+DeepSeek-R1+Streamlit实践

本地AI对话系统搭建:Ollama+DeepSeek-R1+Streamlit实践

1. 项目概述:本地AI对话系统的核心价值在AI技术爆发的当下,能够自主掌控的本地对话系统正成为开发者群体的新宠。这个基于OllamaDeepSeek-R1:7BStreamlit的技术方案,完美解决了云端服务的三大痛点:数据隐私性差、API调用成本高、功…

2026/7/29 18:49:00 阅读更多 →
护网行动前奏,新手如何快速掌握 Kali 核心工具用法

护网行动前奏,新手如何快速掌握 Kali 核心工具用法

快速构建你的攻防武器库在网络安全领域,尤其是面对护网行动或红蓝对抗这类高强度实战场景时,时间就是生命。对于刚入门的新手而言,最忌讳的不是技术不够深,而是面对庞大的工具集无从下手,或者在理论海洋中迷失方向。Ka…

2026/7/29 18:49:00 阅读更多 →

最新新闻

拉伸做了一堆,肌肉还酸三天?可能和“缺氧”有关

拉伸做了一堆,肌肉还酸三天?可能和“缺氧”有关

拉伸做了一堆,肌肉还酸三天?可能和“缺氧”有关 在全民健身的热潮里,我们习惯了用汗水丈量意志力,却常常误解了身体的语言。很多人把训练后的“延迟性肌肉酸痛”(DOMS)归结为热身不足或拉伸不到位&#xff…

2026/7/29 19:05:06 阅读更多 →
Vue路由守卫全解析:从权限控制到导航流程优化

Vue路由守卫全解析:从权限控制到导航流程优化

1. 项目概述:为什么路由守卫是Vue应用的“门神”?如果你正在开发一个Vue应用,尤其是涉及用户登录、权限控制、页面访问记录等功能的单页应用(SPA),那么你一定绕不开“路由守卫”这个概念。它不像v-for、v-i…

2026/7/29 19:05:06 阅读更多 →
【Matlab】传热传质过程数值模拟程序

【Matlab】传热传质过程数值模拟程序

【Matlab】传热传质过程数值模拟程序 一、引言 传热传质是自然界与工业生产中普遍存在的物理过程,广泛应用于能源动力工程、化工生产、建筑节能、航空航天、材料制备、环境工程等诸多领域。传热过程主要包含热传导、热对流与热辐射三种形式,传质过程则涵盖分子扩散、对流传…

2026/7/29 19:05:06 阅读更多 →
便携牙科锂电设备轻薄化设计:ES599-74D243超薄DFN开关机芯片选型分析

便携牙科锂电设备轻薄化设计:ES599-74D243超薄DFN开关机芯片选型分析

近年来,便携式牙科设备、口腔诊疗设备及医美便携器械,普遍朝着无线化、小型化、轻量化方向升级。这类设备多采用3.7V锂电池供电无线充电方案,整机内部结构紧凑,手柄腔体空间极其有限,对开关机控制芯片的封装体积、功耗…

2026/7/29 19:05:06 阅读更多 →
【MATLAB】嵌入式蓝牙通信建模与开发

【MATLAB】嵌入式蓝牙通信建模与开发

【MATLAB】嵌入式蓝牙通信建模与开发 摘要:蓝牙BLE低功耗蓝牙是嵌入式物联网设备无线通信的主流方案,具备功耗低、连接简单、成本低廉、组网灵活的优势,广泛应用于无线数据透传、设备遥控、传感器数据上传、物联网终端交互等场景。嵌入式蓝牙开发普遍存在通信时序混乱、数据…

2026/7/29 19:05:06 阅读更多 →
BilibiliDown终极指南:简单三步搞定B站视频下载与音频提取

BilibiliDown终极指南:简单三步搞定B站视频下载与音频提取

BilibiliDown终极指南:简单三步搞定B站视频下载与音频提取 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirro…

2026/7/29 19:04:05 阅读更多 →

日新闻

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

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

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

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻