当前使用版本(必填,否则不予处理)

SpringBoot: 2.5.0

Mybatis-Plus: 3.4.3

MySQL: 8.0.16

MySQL驱动:8.0.25

exception

该问题是如何引起的?(确定最新版也有问题再提!!!)

在查询语句中加入以下条件:

queryWrapper.orderByAsc(true, "convert(name using GBK)");

没有以上条件就不会出现该错误

该现象只在使用了MyBatis-Plus框架时发生,直接在数据库客户端中执行对应SQL正常

重现步骤(如果有就写完整)

  1. 准备一张表,随便插入一些数据

  2. 使用代码生成工具反向生成代码,并配置分页插件

  3. 在查询条件中加入以下语句:

queryWrapper.orderByAsc(true, "convert(name using GBK)");

  1. 调用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报错。 MyBatis-Plus 分页查询报net.sf.jsqlparser.parser.ParseException: Encountered unexpected token: 这一行,可以不走优化sql逻辑,!page.optimizeCountSql() 走这个逻辑,直接用lowLevelCountSql。入参page page.setOptimizeCountSql(false);就行。