JFinal mysql分页查询 中文排序问题!急!

数据库:mysql5.7

查询结果要求按照某一列的中文排序,然后查询sql中是这么写的:

blob.png

由于stu_name 列在数据库中是utf-8编码 所以sql中使用了转码函数

convert(stu_name using gbk)

使用后查询报错:

blob.png

很显然是sql 有问题。于是把sql拿到数据库去执行,然而是好使的。头皮有点发麻。。。。。。

没办法 打断点一步步看呗,于是找到问题出在这里:

sqlExceptSelect 没问题

blob.png

问题是执行config.dialect.replaceOrderBy(sqlExceptSelect) 后totalRowSql 就有问题了:

blob.png

不知所措。。。。。

还请大神指点一下,谢谢!!


评论区

JFinal

2018-05-22 21:24

jfinal 为这种情况专门准备了 paginateByFullSql 方法,具体用法在这里有:
http://www.jfinal.com/doc/5-6

分页查询获取 totalRow 这个数据的时候需要用正则移除 order by 子句,而 sql 可以是很复杂的嵌套结构,如果要考虑各种情况用正则将 order by 移除干净,性能会很差

而绝大部分情况下的 order by 是可以用简单正则处理的,因为用 paginateByFullSql 来支持复杂 order by 是最佳方案

JFinal

2018-05-22 21:25

还有一个简单办法是在你原有 sql 外面再套一个 select *:
select * from ( 原 sql 在这里 ) as temp

最后的用法是:
paginate("select *", "from ( 原 sql 在这里 ) as temp", ...)

热门反馈

扫码入社