当前使用版本(必填,否则不予处理)
SpringBoot: 2.5.0
Mybatis-Plus: 3.4.3
MySQL: 8.0.16
MySQL驱动:8.0.25
该问题是如何引起的?(确定最新版也有问题再提!!!)
在查询语句中加入以下条件:
queryWrapper.orderByAsc(true, "convert(name using GBK)");
没有以上条件就不会出现该错误
该现象只在使用了MyBatis-Plus框架时发生,直接在数据库客户端中执行对应SQL正常
重现步骤(如果有就写完整)
-
准备一张表,随便插入一些数据
-
使用代码生成工具反向生成代码,并配置分页插件
-
在查询条件中加入以下语句:
queryWrapper.orderByAsc(true, "convert(name using GBK)");
- 调用service的page方法并传入分页参数及queryWrapper
报错信息
c.b.m.e.p.i.PaginationInnerInterceptor : optimize this sql to a count sql has exception, sql: "SELECT id,name,version,identity,type,desc,enable,content,content AS content2 FROM tbl_template WHERE (name LIKE ?) ORDER BY convert(name using GBK) ASC", exception:
net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: "(" "("
at line 3, column 38.
Was expecting one of:
"&"
","
"::"
";"
"<<"
">>"
"ASC"
"DESC"
"EXCEPT"
"FOR"
"INTERSECT"
"MINUS"
"NULLS"
"ORDER"
"UNION"
"^"
"|"
Comment From: miemieYaho
net.sf.jsqlparser.parser.ParseException
Comment From: csxcsx00
在JSQLParser项目中跟踪相关问题 https://github.com/JSQLParser/JSqlParser/issues/1257#issue-938775319
Comment From: Julian-Ma
我也碰到了这个错误,网上没找到答案,刚刚看了源码解决。
这个是mybatis-plus分页count查询解析sql报错。
这一行,可以不走优化sql逻辑,!page.optimizeCountSql() 走这个逻辑,直接用lowLevelCountSql。入参page page.setOptimizeCountSql(false);就行。