测试杂谈——一条SQL引发的思考(二)
在前段时间,曾写过一篇关于SQL问题的文章,测试杂谈——一条SQL引发的思考(一)。
今天这篇,算是个问题记录吧,问题并不复杂,但对于测试同学而言,确实是个需要关注的点。
问题分析
最近在日常工作中,又遇到一个报错,日志中的具体报错如下:
res=500 en**** Server Error,error trace StatementCallback; bad SQL grammar [UPDATE dep SET h = CONCAT('test San’Zhang', substring(path, 16)) WHERE h LIKE 'test San'Zhang|%' and id = '12345678']; nested exception is java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Zhang|%' and id = '12345678'' at line 1
将报错核心点提取,就是个SQL报错,来看具体SQL,如下所示:
UPDATE dep SET h = CONCAT('test San’Zhang', substring(path, 16)) WHERE h LIKE 'test San'Zhang|%' and id = '12345678';
看到这里,对于SQL基本功扎实的朋友,应该已经看出问题所在了。
看到这个问题后,分别找了研发和测试同学。找研发是让排查问题的根因,为啥能存进这样的数据;找测试是想考察下,SQL的基本功(带领的测试同学我没面过)。
得到的结果,还真有点震惊到我了,只能说“同志还需努力呀!!!!!”
好了,回到正题上来吧。这个SQL如日志里的报错,就是个语法问题:bad SQL grammar。但到底是哪里有问题呢?
就是like语句这里 h LIKE 'test San'Zhang|%' , test San'Zhang 中的单引号没有转义成功,导致在完整的SQL语句中,后半部分被截断,最终整个SQL报错。
这个只是SQL层面的问题,但根因是啥,还得研发同学解决。
解决方案
转义
最好的处理方式,就是在代码层面上,将英文的单引号做转义处理,这样就可以避免掉这种报错了
SQL如下:
UPDATE dep SET h = CONCAT('test San’Zhang', substring(path, 16)) WHERE h LIKE 'test San’Zhang|%' and id = '12345678';
条件值用英文双引号
另外一种方式,就是将like条件值用英文双引号,这样就避免了被截断的问题
SQL如下:
UPDATE dep SET h = CONCAT('test San’Zhang', substring(path, 16)) WHERE h LIKE "test San'Zhang|%" and id = '12345678';
好了,以上就是今天的内容了。分析这个问题并不复杂,从中也有些感触,基本功还是需要扎实,一起努力吧。
测试杂谈——一条SQL引发的思考(二)的更多相关文章
- 测试杂谈——一条SQL引发的思考
此篇只是个人记录,相信各位大神早已轻车熟路,不喜勿喷:有错之处,欢迎指正. 有一天收到新人的咨询,是关于sql的问题. 问题1:为什么sql查询的数据与界面展示的不准确: 问题2:为什么sql查询时间 ...
- 曲演杂坛--一条DELETE引发的思考
原文:曲演杂坛--一条DELETE引发的思考 场景介绍: 我们有一张表,专门用来生成自增ID供业务使用,表结构如下: CREATE TABLE TB001 ( ID ,) PRIMARY KEY, D ...
- 【数据库】_由2000W多条开房数据引发的思考、实践----给在校生的一个真实【练耙场】,同学们,来开始一次伟大的尝试吧。
× 缘起---闲逛博客园 前几天的时候,在某一QQ群看到一条消息“XXX酒店开房XXXBTXX迅雷BT下载”,当时是一目十行的心态浏览,目光掠过时, 第一反应我想多了~以为是XX种子(你懂的~ ...
- 一条 SQL 引发的事故,同事直接被开除!!
前言 Insert into select请慎用. 这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份.本想通过程序先查询查出来然后批量插入.但xxx觉得这样有点慢,需要耗费大量的网络I ...
- 一条sql引发的“血案”
前几天有一个项目要上线,需要对表的一个字段进行扩充,项目经理让我准备脚本,于是我准备了如下的脚本: )); )); )); 结果上线的时候,ord_log1和ord_log2表中有30万数据,在执行的 ...
- 同一条sql insert 有时快有时慢 引发的血案
同一条sql语句,为什么有时插入块,有时插入慢原因剖析 背景:同一条sql ,有时插入时间几毫秒,有时插入时间几十毫秒,为什么? Sql角度:简单insert 表角度: 一个主键 系统参数角度: 开启 ...
- 一条SQL在 MaxCompute 分布式系统中的旅程
摘要:2019杭州云栖大会大数据技术专场,由阿里云资深技术专家侯震宇.阿里云高级技术专家陈颖达以及阿里云资深技术专家戴谢宁共同以“SQL在 MaxCompute 分布式系统中的旅程 ”为题进行了演讲. ...
- 解决一道leetcode算法题的曲折过程及引发的思考
写在前面 本题实际解题过程是 从 40秒 --> 24秒 -->1.5秒 --> 715ms --> 320ms --> 48ms --> 36ms --> ...
- 『片段』OracleHelper (支持 多条SQL语句)
C# 调用 Oracle 是如此尴尬 >System.Data.OracleClient.dll —— .Net 自带的 已经 过时作废. >要链接 Oracle 服务器,必须在 本机安装 ...
随机推荐
- 如何记录分析你的炼丹流程—可视化神器Wandb使用笔记【1】
本节主要记录使用wandb记录训练曲线以及上传一些格式的数据将其展示在wandb中以便分析的方法,略过注册安装部分(可使用pip intall wandb安装,注册相关issue可上网搜索),文章着重 ...
- LuoguP1020 导弹拦截 (LIS)
最长不降和单升 #include <iostream> #include <cstdio> #include <cstring> #include <algo ...
- FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务
FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务 前言 最近的工作中,需要将手机上的文件发送到公司的 FTP 的服务器.按照从前的思路,自然是,先将文件传到电脑,再由电脑上传 ...
- 非常全的一份Python爬虫的Xpath博文
非常全的一份Python爬虫的Xpath博文 Xpath 是 python 爬虫过程中非常重要的一个用来定位的一种语法. 一.开始使用 首先我们需要得到一个 HTML 源代码,用来模拟爬取网页中的源代 ...
- 【C标准库】详解strerror函数
创作不易,感谢支持 strerror 头文件:string.h 描述: strerror() 函数接受一个参数:errnum,它是一个表示错误代码的整数值.此函数将错误代码转换为说明错误的合适字符串指 ...
- String与StringBuilder相互转换以及获取字符串中第一个中文汉字
String与StringBuilder相互转换 1. StringBuilder转为String StringBuilder sb = new StringBuilder(); sb.append( ...
- APICloud如何对接大牛直播SDK
随着apicloud的普及,越来越多的用户苦于apicloud下没有一款真正靠谱低延迟的rtmp/rtsp直播播放器苦恼. 鉴于此,大牛直播SDK携手apicloud资深版主,推出apicloud对接 ...
- Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点
Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...
- kettle通过SSH连接Mysql数据库(SSH隧道)
kettle通过SSH连接Mysql数据库(SSH隧道) Kettle无法直接连接使用SSH通道的MySQL,通过SSH隧道(推荐)或者需要借助工具PuTTY(不用时需要注销不推荐),具体操作如下所示 ...
- 分布式链路追踪体验-skywalking入门使用
背景 旁友,你的线上服务是不是偶尔来个超时,或者突然抖动一下,造成用户一堆反馈投诉.然后你费了九牛二虎之力,查了一圈圈代码和日志才总算定位到问题原因了.或者公司内部有链路追踪系统,虽然可以很轻松地通过 ...