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.mfbz.cn/a/126945.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

从零实现label-studio和SAM进行半自动标注以及踩坑日志

这里写目录标题 引言什么是半自动标注conda环境创建与启动playground下载pytorch下载(Linux服务端和Win10客户端)SAM安装和预训练权重添加SAM相关库安装问题1 安装 Label-Studio 和 label-studio-ml-backend问题2:TypeError: numpy._DTypeMet…

嵌入式软件开发常用工具有哪些?

分享一些嵌入式软件开发常用工具。 1、Keil MDK:这是德国Keil公司开发的基于8051、9051、ARM7、ARM9系列微控制器的嵌入式软件开发工具,它提供了包括C编译器、宏汇编、连接器、库管理器、仿真器等在内的完整开发方案。Keil还提供了丰富的中间件和库函数&…

Verilog 之 initial 模块与always 模块的用法与差异

文章目录 initial语法和用法特点和注意事项用途 always语法和用法特点和注意事项用途 二者差异 initial 在 Verilog 中,initial 块是用来在模拟开始时执行一次性初始化操作的一种建模方式。它通常用于模拟初始条件或进行一次性的初始化设置,而且只会在模…

LINUX入门篇【4】开发篇--开发工具vim的使用

前言: 从这一篇开始,我们将正式进入使用LINUX进行写程序和开发的阶段,可以说,由此开始,我们才开始真正去使用LINUX。 介绍工具: 1.LINUX软件包管理器yum: 1.yum的介绍: 在LINUX…

Sublime Text Mac/Win中文版:代码编辑器的卓越典范

你是否曾为寻找一个功能强大且易于使用的代码编辑器而感到困扰?现在,我要向你介绍一个解决方案——Sublime Text。这款代码编辑器以其高效、灵活和直观的特点,赢得了开发人员的广泛喜爱。让我们深入了解一下Sublime Text的优点。 一、强大的…

易点易动固定资产管理系统:实现全生命周期闭环式管理和快速盘点

固定资产管理对于企业来说至关重要,它涉及到资产的采购、领用、使用、维护和报废等各个环节。然而,传统的固定资产管理方式往往繁琐、耗时,容易导致信息不准确和资源浪费。为了解决这些问题,我们引入易点易动固定资产管理系统&…

【Git企业开发】第六节.配置 Git和标签管理

文章目录 前言一、配置 Git 1.1 忽略特殊文件 1.2 给命令配置别名二、标签管理 2.1 理解标签 2.2 创建标签 2.3 操作标签 总结 前言 一、配置 Git 1.1 忽略特殊文件 在日常开发中,我们有些文件不想或者不应该提交到远端,…

第四章Web服务器(2)

第四章Web服务器(2) 1.基于https协议的静态网站 1.1.概念解释 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。 HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#…

AI 为先的时代,企业如何深度用云?

「又一年云栖,SOFAStack 走向云原生深处。」 SOFAStack 5.0 与蚂蚁集团代码大模型 CodeFuse 全面融合,涵盖设计、研发、测试、运维等领域,提供从领域建模到智能运维的端到端 Copilot 产品解决方案,为企业打造新一代 AI 云原生 Paa…

Python - 利用 OCR 技术提取视频台词、字幕

目录 一.引言 二.视频处理 1.视频样式 2.视频截取 ◆ 裁切降帧 ◆ 处理效果 3.视频分段 三.OCR 处理 1.视频帧处理 2.文本识别结果 3.后续工作与优化 ◆ 识别去重 ◆ 多线程提效 ◆ 片头片尾优化 四.总结 一.引言 视频经常会配套对应的台词或者字幕&#xff0c…

Modern C++ 转换构造函数和类型转换函数

在 C/C 中,不同的数据类型之间可以相互转换。无需用户指明如何转换的称为自动类型转换(隐式类型转换),需要用户显式地指明如何转换的称为强制类型转换。 不管是自动类型转换还是强制类型转换,前提必须是编译器知道如何…

温故知新:探究Android UI 绘制刷新流程

一、说明: 基于之前的了解知道ui的绘制最终会走到Android的ViewRootImpl中scheduleTraversals进行发送接收vsync信号绘制,在ViewRootImpl中还会进行主线程检测,也就是我们所谓子线程更新ui会抛出异常。 像我们常用的刷新ui,inval…

华为ipsec vpn双链路主备备份配置案例

配置就是这配置,意外是完成后不通,待以后处理! FW_A配置: dhcp enable ip-link check enable ip-link name check_b destination 2.2.2.2 interface GigabitEthernet1/0/0 mode icmp next-hop 202.38.163.2 acl number 3000 rul…

新方向!文心一言X具身智能,用LLM大模型驱动智能小车

具身智能已成为近年来研究的热点领域之一。具身智能强调将智能体与实体环境相结合,通过智能体与环境的交互,来感知和理解世界,最终实现在真实环境中的自主决策和运动控制。 如何基于文心大模型,低成本入门“具身智能”&#xff0…

振南技术干货集:C语言的一些“骚操作”及其深层理解(2)

注解目录 第二章《c语言的一些“操作”及其深层理解》 一、字符串的实质就是指针 (如何将 35 转为对应的十六进制字符串”0X23”?) 二 、转义符\ (打入字符串内部的“奸细”。) 三、字符串常量的连接 &#xff…

JAVA基础1:Java概述

1.JAVA语言 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 JAVA语言是美国Sun公司在1995年推出的计算机语言 JAVA之父:詹姆斯高斯林 2.JAVA语言跨平台原理 跨平台:JAVA程序可以在…

Yolov5 + 界面PyQt5 +.exe文件部署运行

介绍 Yolov5是一种基于深度学习的目标检测算法,PyQt5是一个Python编写的GUI框架,用于创建交互式界面。在部署和运行Yolov5模型时,结合PyQt5可以方便地创建一个用户友好的界面,并将代码打包为.exe文件以供其他人使用。 下面是一个…

学者观察 | 联邦学习与区块链、大模型等新技术的融合与挑战-北京航空航天大学童咏昕

导语 当下,数据已成为经济社会发展中不可或缺的生产要素,正在发挥越来越大的价值。但是在数据使用过程中,由于隐私、合规或者无法完全信任合作方等原因,数据的拥有者并不希望彻底和他方共享数据。为解决原始数据自主可控与数据跨…

新登录接口独立版变现宝升级版知识付费小程序-多领域素材资源知识变现营销系统

源码简介: 资源入口 点击进入 源码亲测无bug,含前后端源码,非线传,修复最新登录接口 梦想贩卖机升级版,变现宝吸取了资源变现类产品的很多优点,摒弃了那些无关紧要的东西,使本产品在运营和变现…

线上SQL超时场景分析-MySQL超时之间隙锁 | 京东物流技术团队

前言 之前遇到过一个由MySQL间隙锁引发线上sql执行超时的场景,记录一下。 背景说明 分布式事务消息表:业务上使用消息表的方式,依赖本地事务,实现了一套分布式事务方案 消息表名:mq_messages 数据量:3…
最新文章