zoukankan      html  css  js  c++  java
  • Mysql踩坑经历

           今天下午收到同事反馈数据归档有一个任务失败了,并且给我截图错误信息是BadSqlGrammarException,这个错误相信大家应该都见过,显然是SQL语句里面存在语法错误;但是,我的SQL怎么会有问题呢!!我这么稳的人…更何况其他归档任务都是用的这个SQL啊,不可能是SQL的问题啊。所以,我当时的第一反应就是是不是他喵的又把任务配错了,或者是数据库权限的问题,然后就开始了漫长的定位过程。

         错误信息:

        

           首先确认了任务配置是没有问题的,并且看这个错误的样子也不太像是权限的问题。看了半天实在是看不出有什么问题,于是使出了杀手锏—本地调试大法:在本地跑处理同一张表的任务,不跑不知道,一跑吓一跳,结果居然是一样的错误!!!纳尼?我的系统居然有BUG!这简直不能忍。但是,到底是怎么回事呢?首先看错误描述,一个INSERT INTO 语句有一部分被截断了,所以当时猜测是INSERT语句超长了,并且这张表字段也挺多的。然后为了验证我的猜测,就随意删除了一部分字段,重新试了,下果然就可以了。但是感觉这个也不是很科学,在我的印象中应该是有比这张表字段更多的都没问题的。果然我又从后面删除一些字段试了下也不行,果然并不是这个问题。

          应该是某些特定字段的问题吧,后来觉得;但是怎么找到这个字段呢?于是我使用了最原始的排除法了。逐个字段进行删除,然后重跑任务…终于,在删除到一个名字为character字段的时候,突然就可以了。我当时看到这个字段的名字恍然大悟,这个好像是Mysql的关键字吧!当时真的想骂人…被坑死了有没有。不过话说回来,即使别人使用关键字作为字段名我们也得支持啊。于是,我想起了有一种写法是SQL语句中字段使用转义符,类似`character`,试了一下果然可以哦。

         测试效果:

         不使用转义符:

         

         使用转义符:

         

        所以,结论是后续建表的时候,尽量不要使用关键字作为字段名,避免坑害别人;写SQL语句的时候字段名都要使用转义符,避免被别人坑害~~

  • 相关阅读:
    vue从入门到进阶:自定义指令directive,插件的封装以及混合mixins(七)
    js模板引擎mustache介绍及实例
    vue v-cloak 的作用和用法
    vue中$event理解和框架中在包含默认值外传参
    Node.js如何设置允许跨域
    前端常见跨域解决方案(全)
    http-server使用教程 hs -o
    JMeter性能测试,完整入门篇
    Java源码初学_LinkedHashMap
    Java源码初学_HashMap
  • 原文地址:https://www.cnblogs.com/guishenyouhuo/p/9992697.html
Copyright © 2011-2022 走看看