Mysql踩坑经历

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

     错误信息:

    

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

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

     测试效果:

     不使用转义符:

     

     使用转义符:

     

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

猜你喜欢

转载自www.cnblogs.com/guishenyouhuo/p/9992697.html
今日推荐