在前段时间,曾写过一篇关于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引发的思考(二)的更多相关文章

  1. 测试杂谈——一条SQL引发的思考

    此篇只是个人记录,相信各位大神早已轻车熟路,不喜勿喷:有错之处,欢迎指正. 有一天收到新人的咨询,是关于sql的问题. 问题1:为什么sql查询的数据与界面展示的不准确: 问题2:为什么sql查询时间 ...

  2. 曲演杂坛--一条DELETE引发的思考

    原文:曲演杂坛--一条DELETE引发的思考 场景介绍: 我们有一张表,专门用来生成自增ID供业务使用,表结构如下: CREATE TABLE TB001 ( ID ,) PRIMARY KEY, D ...

  3. 【数据库】_由2000W多条开房数据引发的思考、实践----给在校生的一个真实【练耙场】,同学们,来开始一次伟大的尝试吧。

      ×   缘起---闲逛博客园 前几天的时候,在某一QQ群看到一条消息“XXX酒店开房XXXBTXX迅雷BT下载”,当时是一目十行的心态浏览,目光掠过时, 第一反应我想多了~以为是XX种子(你懂的~ ...

  4. 一条 SQL 引发的事故,同事直接被开除!!

    前言 Insert into select请慎用. 这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份.本想通过程序先查询查出来然后批量插入.但xxx觉得这样有点慢,需要耗费大量的网络I ...

  5. 一条sql引发的“血案”

    前几天有一个项目要上线,需要对表的一个字段进行扩充,项目经理让我准备脚本,于是我准备了如下的脚本: )); )); )); 结果上线的时候,ord_log1和ord_log2表中有30万数据,在执行的 ...

  6. 同一条sql insert 有时快有时慢 引发的血案

    同一条sql语句,为什么有时插入块,有时插入慢原因剖析 背景:同一条sql ,有时插入时间几毫秒,有时插入时间几十毫秒,为什么? Sql角度:简单insert 表角度: 一个主键 系统参数角度: 开启 ...

  7. 一条SQL在 MaxCompute 分布式系统中的旅程

    摘要:2019杭州云栖大会大数据技术专场,由阿里云资深技术专家侯震宇.阿里云高级技术专家陈颖达以及阿里云资深技术专家戴谢宁共同以“SQL在 MaxCompute 分布式系统中的旅程 ”为题进行了演讲. ...

  8. 解决一道leetcode算法题的曲折过程及引发的思考

    写在前面 本题实际解题过程是 从 40秒 --> 24秒 -->1.5秒 --> 715ms --> 320ms --> 48ms --> 36ms --> ...

  9. 『片段』OracleHelper (支持 多条SQL语句)

    C# 调用 Oracle 是如此尴尬 >System.Data.OracleClient.dll —— .Net 自带的 已经 过时作废. >要链接 Oracle 服务器,必须在 本机安装 ...

随机推荐

  1. uniapp中用canvas实现小球碰撞的小动画

    uniapp 我就不想喷了,踩了很多坑,把代码贡献出来让大家少踩些坑. 实现的功能: 生成n个球在canvas中运动,相互碰撞后会反弹,反弹后的速度计算我研究过了,可以参考代码直接用 防止球出边框 防 ...

  2. Luogu1879 [USACO06NOV]玉米田Corn Fields (状压DP)

    曾经放弃的坑,都是坑 #include <iostream> #include <cstdio> #include <cstring> #include <a ...

  3. HCIA-datacom 4.2 实验二:本地AAA配置实验

    关于本实验 AAA是Authentication(认证).Authorization(授权)和Accounting(计费)的简称,是网络安全的一种管理机制,提供了认证.授权.计费三种安全功能.这三种安 ...

  4. Java对象已死吗 深入理解Java虚拟机笔记

    1.引用计数器法 给每个对象设置一个计数器,每当有一个引用就给计数器的值+1,引用时小时就减一,当计数器值为0是就可以回收掉了. 主流虚拟机都没有使用这种算法,循环依赖问题 2.可达性分析: 思路是通 ...

  5. 为什么各大厂自研的内存泄漏检测框架都要参考 LeakCanary?因为它是真强啊!

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...

  6. SyncFusion安装和使用

    1.Visual Studio 继承 Visual Studio菜单栏 → 扩展 → 扩展管理 → 搜索框中搜索 "Syncfusion Windows",单击 "Win ...

  7. java方法---递归

    java方法递归 1.什么是递归 就是自己调用自己: 2.递归结构的两个部分 递归头:什么时候不调用自身方法.如果仅有头,将陷入死循环.递归体:什么时候需要调用自身方法.

  8. n【c#】委托:delegate 学习笔记

    类似于c/c++的指针,只不过c#的委托存储的是某个方法的调用,派生子System.Delegate

  9. windows下Inno Setup打包

    基于inno setup的windos打包,主要脚本语言inno script.下载地址:https://jrsoftware.org/isdl.php相关打包教程:https://blog.csdn ...

  10. Mysql阶段性项目——QQ数据库管理

    MySql 数据库设计与应用 第七章项目练习 阶段项目--QQ数据库管理 任务概述: 模拟QQ在线聊天系统 后台数据库的创建 基本数据表的创建 表约束. 表间关系的添加 进行数据增加. 删除. 修改. ...