mysql隐式转换转换引起的bug

生产环境中遇到一个情况情况 ,过滤数据发现过滤不掉相关值情况,具体情况如下

原始数据:

CREATE TABLE `test` (`id` bigint(11) NOT NULL AUTO_INCREMENT COMMENT '自增id',`subject_id` bigint(11) NOT NULL DEFAULT '0' COMMENT '主题id',`subject_name` varchar(255) NOT NULL DEFAULT '' COMMENT '主题名称',`is_deleted` tinyint(2) NOT NULL DEFAULT '0' COMMENT '该条数据是否删除 ,0:否,1:是',`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;INSERT INTO `test` (`id`, `subject_id`, `subject_name`, `is_deleted`, `create_time`, `update_time`) VALUES (3, 0, '测试分析导出', 1, '2023-10-31 14:26:17', '2023-11-10 11:00:15');
INSERT INTO `test` (`id`, `subject_id`, `subject_name`, `is_deleted`, `create_time`, `update_time`) VALUES (4, 0, '主题58', 1, '2023-11-02 11:06:50', '2023-11-10 11:00:15');
INSERT INTO `test` (`id`, `subject_id`, `subject_name`, `is_deleted`, `create_time`, `update_time`) VALUES (5, 0, '销售分析', 0, '2023-11-02 11:30:41', '2023-11-10 11:00:15');
INSERT INTO `test` (`id`, `subject_id`, `subject_name`, `is_deleted`, `create_time`, `update_time`) VALUES (6, 0, '流量分析', 0, '2023-11-02 11:31:39', '2023-11-10 11:00:15');
INSERT INTO `test` (`id`, `subject_id`, `subject_name`, `is_deleted`, `create_time`, `update_time`) VALUES (7, 0, '购物车分析', 1, '2023-11-02 11:32:10', '2023-11-10 11:00:15');
INSERT INTO `test` (`id`, `subject_id`, `subject_name`, `is_deleted`, `create_time`, `update_time`) VALUES (8, 0, '兴趣收藏分析', 1, '2023-11-02 11:32:43', '2023-11-10 11:00:15');
INSERT INTO `test` (`id`, `subject_id`, `subject_name`, `is_deleted`, `create_time`, `update_time`) VALUES (9, 0, '商品曝光分析', 1, '2023-11-02 11:33:13', '2023-11-10 11:00:15');
INSERT INTO `test` (`id`, `subject_id`, `subject_name`, `is_deleted`, `create_time`, `update_time`) VALUES (10, 0, '在线货品分析', 1, '2023-11-02 11:33:41', '2023-11-10 11:00:15');
INSERT INTO `test` (`id`, `subject_id`, `subject_name`, `is_deleted`, `create_time`, `update_time`) VALUES (11, 0, '优惠券分析', 1, '2023-11-02 11:34:12', '2023-11-10 11:00:15');
INSERT INTO `test` (`id`, `subject_id`, `subject_name`, `is_deleted`, `create_time`, `update_time`) VALUES (13, 0, 'presto测试查询', 0, '2023-11-09 18:29:34', '2023-11-10 11:00:15');

进行查询的时候发现不应该查询出来的数据,竟然出现了

问题原因及避免

1、原因: 当MySQL字段类型和传入条件数据类型不一致时,会进行隐形的数据类型转换(MySQL Implicit conversion)

2、若字符串是以数字开头,且全部都是数字,则转换为数字结果是整个字符串;部分是数字,则转换为数字结果是截止到第一个不是数字的字符为止。 理解: varchar str = "123dafa",转换为数字是123 。 SELECT '123dafa'+1 ; --- 124 。

3、若字符串不是以数字开头,则转换为数字结果是 0 。 varchar str = "aabb33" ; 转换为数字是 0 。 SELECT 'aabb33'+100 ; --- 100 。

本案例正好符合第三种情况,因为subject_id是int类型,而过滤条件是varchar类型,同时首字母是英文而不是数字,导致默认转换为0,所以查询出来不一样的结果

参考文章

MySQL 字符串类型用数字可以查出来 MySQL字符串类型会转换成数字 MySQL隐式类型转换_mysql存的是字符串只能用数字查-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/136826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《QT从基础到进阶·十七》QCursor鼠标的不同位置坐标获取

一些常用鼠标图形: 鼠标光标相对于整个电脑屏幕的位置:QCursor::pos() 当前光标相对于当前窗口的位置:this->mapFromGlobal(QCursor::pos()) void MainWindow::mouseReleaseEvent(QMouseEvent* event) {QPoint pos event->pos(); …

pip 安装任意软件包报错

现象 使用 pip 命令时提示 查看源码 可以看到是从 pip 包中导入 main失败,点击查看目录 main 文件不见了,判断是文件缺失,重装 pip 即可 # python3 下载 pip curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # python2 下载…

代码随想录训练营Day1:二分查找与移除元素

本专栏内容为:代码随想录训练营学习专栏,用于记录训练营的学习经验分享与总结。 文档讲解:代码随想录 视频讲解:二分查找与移除元素 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C &#x1f69a…

Java进阶(JVM调优)——阿里云的Arthas的使用 安装和使用 死锁查找案例,重新加载案例,慢调用分析

前言 JVM作为Java进阶的知识,是需要Java程序员不断深度和理解的。 本篇博客介绍JVM调优的工具阿里云的Arthas的使用,安装和使用,命令的使用案例;死锁查询的案例;重新加载一个类信息的案例;调用慢的分析案…

通配符匹配

题目链接 通配符匹配 题目描述 注意点 s 仅由小写英文字母组成p 仅由小写英文字母、‘?’ 或 ‘*’ 组成‘?’ 可以匹配任何单个字符‘*’ 可以匹配任意字符序列(包括空字符序列) 解答思路 最初想到的是dfs 剪枝,但是用例超时了参照题…

STM32笔记—EXTI外部中断

一、简介 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运行; 中断优先级&…

maven中的install 和 clean命令,以及compile、、package、test等操作介绍

maven中的install命令 主要就是谁要被其他模块依赖就install谁 Maven工具可以进行clean、compile、install、package、test等操作,但是这些操作有什么用呢,以下面的p2p-exterface为例说明一下,pwp-exterface工程目录如下: com…

centos中安装的goland配置sdk报错:所选的目录不是Go SDK的有效主路经

选中目录后一直报错: 正确的位置: 原因竟然是使用 解压go1.21.4.linux-amd64.tar.gz 包出来,少了scr和test目录,重新解压后可以正确设定SDK主目录。 有同样问题的可以确认一下。 tar -C /usr/local -zxvf go1.19.2.linux-amd64.…

随机链表的复制

题目描述 给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。 深拷贝应该正好由n个全新节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的nex…

SpringBoot使用Mybatis

SpringBoot使用Mybatis Orm 框架的本质是简化编程中操作数据库的编码,发展到现在基本上就剩两家了,一个是宣称可以不用写一句 Sql 的 Hibernate,一个是可以灵活调试动态 Sql 的 Mybatis ,两者各有特点,在企业级系统开发中可以根…

解决EnableKeyword(“_Emission“)运行状态不起作用

我使用的是Standard Shader,一开始“_Emission”没有开启 当我运行下面的代码,可以看到Inspector窗口已经生效,然而物体本身并没有重新开始渲染,反射没有开启 public GameObject go; // Start is called before the first frame…

极智开发 | CUDA线程模型与全局索引计算方式

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 CUDA线程全局索引计算方式。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq CUDA 线程全局索引的计算,是很容…

nuxt项目相关学习

传统服务端渲染流程 单页面应用 1. nuxt 是什么 Nuxt.js 是一个基于 Vue.js 的通用应用框架。 通过对客户端/服务端基础架构的抽象组织,Nuxt.js 主要关注的是应用的 UI 渲染。 就使用而言,组件写法基本和vue相差不大,区别在于几个钩子函数,以及一些服务端渲染相关…

【Linux】:初识git || centos下安装git || 创建本地仓库 || 配置本地仓库 || 认识工作区/暂存区(索引)以及版本库

📮1.初识git Git 原理与使用 课程⽬标 • 技术⽬标:掌握Git企业级应⽤,深刻理解Git操作过程与操作原理,理解⼯作区,暂存区,版本库的含义 • 技术⽬标:掌握Git版本管理,⾃由进⾏版本回退、撤销、修改等Git操…

【Excel】如何画不同时序交叉的百分比堆积柱状图

这里写自定义目录标题 1 将两表交叉合并为一个表1.1 步骤一:在两独立表的工作天数和工资列下面按1-n顺次标号。1.2 步骤二:选中两表需要合并的部分,调出自定义排序1.3 步骤三:选项 ——> 按行排序 (选完后点确定&am…

Java10新增特性

特性列表 Java 10是Java的一个主要版本更新,引入了许多新功能和改进。以下是一些Java 10的新增特性: 局部变量类型推断:Java 10引入了局部变量类型推断,允许开发者使用关键字"var"来声明局部变量,而无需指定…

【STM32】定时器

systick定时器: 【STM32】Systick定时器-CSDN博客 0.通用定时器框图 1.时钟源 2.控制器 3.输入捕获 计数器实际上是与比较寄存器的影子寄存器进行比较的。 4.输出比较 1.STM32的定时器学习要点 参考手册 STM32F1xx中文参考手册.pdf 林何/STM32F103C8 - 码云 -…

Spring的循环依赖问题

文章目录 1.什么是循环依赖2.代码演示3.分析问题4.问题解决5.Spring循环依赖6. 疑问点6.1 为什么需要三级缓存6.2 没有三级缓存能解决吗?6.3 三级缓存分别什么作用 1.什么是循环依赖 上图是循环依赖的三种情况,虽然方式有点不一样,但是循环依…

合成数据在金融服务中的应用

人工智能在金融服务中有着广泛的应用,从流程自动化到聊天机器人和欺诈检测。据估计,到 447 年,银行从人工智能应用中节省的潜在成本总额将达到 2023 亿美元。 但是,其中一些应用程序有其局限性,因为财务数据是最敏感和…

排序算法的空间复杂度和时间复杂度

一、排序算法的时间复杂度和空间复杂度 排序算法 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性 冒泡排序 O(n) O(n) O(n) O(1) 稳定 直接选择排序 O(n) O(n) O(n) O(1) 不稳定 直接插入排序 O(n) O(n) O(n) O(1) 稳定 快速排序 O(n…