开发者社区> 问答> 正文

特殊的索引格式 druid parser 会失败

CREATE TABLE "item_extra" ( "id" int(10) unsigned NOT NULL AUTO_INCREMENT, "item_id" int(10) unsigned NOT NULL DEFAULT '0' COMMENT '商品id', "type" tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '扩展属性类型,0:虚拟商品', "attr_key" varchar(50) NOT NULL COMMENT '扩展属性key', "attr_value" varchar(500) NOT NULL COMMENT '扩展属性value', PRIMARY KEY ("id"), KEY "idx_item_type_kv" ("item_id","type","attr_key","attr_value"(191)) )

使用 1.0.21 parser 会发生如下错误?

com.alibaba.druid.sql.parser.ParserException: not support token:LITERAL_INT at com.alibaba.druid.sql.parser.SQLExprParser.methodRest(SQLExprParser.java:799) ~[druid-1.0.21.jar:1.0.21] at com.alibaba.druid.sql.parser.SQLExprParser.primaryRest(SQLExprParser.java:751) ~[druid-1.0.21.jar:1.0.21] at com.alibaba.druid.sql.dialect.mysql.parser.MySqlExprParser.primaryRest(MySqlExprParser.java:481) ~[druid-1.0.21.jar:1.0.21] at com.alibaba.druid.sql.dialect.mysql.parser.MySqlExprParser.primary(MySqlExprParser.java:132) ~[druid-1.0.21.jar:1.0.21] at com.alibaba.druid.sql.parser.SQLExprParser.expr(SQLExprParser.java:124) ~[druid-1.0.21.jar:1.0.21] at com.alibaba.druid.sql.dialect.mysql.parser.MySqlCreateTableParser.parseConstraint(MySqlCreateTableParser.java:787) ~[druid-1.0.21.jar:1.0.21] at com.alibaba.druid.sql.dialect.mysql.parser.MySqlCreateTableParser.parseCrateTable(MySqlCreateTableParser.java:157) ~[druid-1.0.21.jar:1.0.21] at com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser.parseCreate(MySqlStatementParser.java:340) ~[druid-1.0.21.jar:1.0.21] at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:190) ~[druid-1.0.21.jar:1.0.21] at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatement(SQLStatementParser.java:1974) ~[druid-1.0.21.jar:1.0.21]

原提问者GitHub用户ChinaXing

展开
收起
山海行 2023-07-05 21:34:55 102 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在使用阿里云的Druid SQL Parser解析SQL语句时,有时会出现特殊的索引格式导致解析失败的情况。这通常是因为Druid SQL Parser不支持这种特殊的索引格式。

    为了解决这个问题,可以尝试以下几种方法:

    修改SQL语句,将特殊的索引格式改为标准的索引格式。例如,将索引名用反引号括起来,以避免Druid SQL Parser无法解析。

    升级Druid SQL Parser的版本,以确保支持更多的索引格式。

    使用其他的SQL解析器,例如JSqlParser、ANTLR等。

    如果无法修改SQL语句或者更换SQL解析器,可以考虑手动解析SQL语句,以避免Druid SQL Parser解析失败。手动解析SQL语句需要一定的SQL语法知识和编程能力,需要仔细分析SQL语句的结构,并使用正则表达式或字符串操作等方法来提取需要的信息。

    2023-07-30 09:39:48
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    根据错误信息,看起来是Druid的SQL解析器在解析索引时遇到了问题。具体来说,Druid的1.0.21版本中的解析器似乎不支持索引中指定列的长度。

    在你提供的CREATE TABLE语句中,索引"idx_item_type_kv"的定义中包含了"(191)"这样的列长度指定。然而,Druid的解析器可能无法正确解析这个列长度,从而导致解析失败。

    解决这个问题的一种方法可能是升级Druid版本到一个更新的版本,或者尝试使用其他第三方的SQL解析工具。这些工具可能具有更好的兼容性和更全面的SQL语法支持,从而能够正确解析索引的定义。

    另外,如果你对Druid的解析器存在问题感到担忧,你可以向Druid的开发团队或社区报告此问题,以帮助他们修复和改进解析器的功能。他们可能会提供更详细和准确的解决方案,或者采取其他措施来处理这个问题。

    2023-07-11 17:12:29
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

    2023-07-06 12:17:22
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载