开发者社区> 问答> 正文

token IDENTIFIER integer错误如何解决?mysql能够正常执行

druid版本:

com.alibaba druid-spring-boot-starter 1.1.10 后端异常信息: Cause: java.sql.SQLException: sql injection violation, syntax error: syntax error, expect RPAREN, actual IDENTIFIER pos 221, line 9, column 51, token IDENTIFIER integer :

SQL语句: select date_add(curdate(), interval(cast(help_topic_id as signed integer) - 1) day) gkey, 0 AS gvalue from mysql.help_topic where help_topic_id < day(last_day(curdate())) order by help_topic_id

MySQL版本为5.7

原提问者GitHub用户mallocxw

展开
收起
山海行 2023-07-05 19:27:41 146 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    可能的原因是:

    Druid配置错误
    Druid使用的Lexer分析SQL文本时,出现错误。

    SQL语句存在问题
    SQL语句存在语法问题或错误,无法被正确解析。

    Druid版本问题
    部分早期版本的Druid存在Lexer分析器Bug,可能导致这类错误。

    总的来说,token IDENTIFIER integer 错误主要是与Druid的Lexer有关,它负责解析和 tokenize SQL 语句。

    出现这类错误通常说明:

    Druid配置不当,导致Lexer分析错误
    SQL语句存在语法问题
    Druid版本存在Lexer Bug
    要解决这个问题,主要需要做两步:

    1.检查Druid配置是否正确

    2.仔细检查SQL语句是否有语法问题

    如果以上皆无问题,就有可能是Druid版本的Bug。

    这个时候可以尝试:

    升级到较新版本的Druid,修复Lexer分析器Bug
    2.查看Druid issue tracker,看是否已有对应问题的报告

    3.尝试修改Druid源码,修复Lexer相关的Bug

    2023-07-30 16:49:55
    赞同 展开评论 打赏
  • 您的SQL语句中使用了"integer"作为标识符,但Druid解析器将其视为一个关键字,因此引发了错误。这可能是因为Druid解析器的版本较旧,不支持将"integer"作为标识符使用。

    解决这个问题的一种方法是使用更新版本的Druid,因为更新的版本通常会修复解析器中的一些问题。您可以尝试升级Druid的版本,并再次尝试解析该SQL语句。

    2023-07-11 09:34:32
    赞同 展开评论 打赏
  • 最终发现问题,语法错误导致!

    原回答者GitHub用户mallocxw

    2023-07-06 11:00:40
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像