-
HQL中的中文排序
普通类 -
- 支持
- 批判
- 提问
- 解释
- 补充
- 删除
-
-
直接用order by 中文字段
-
使用convert函数
网上查了一下,可以用CONVERT函数转化成GBK排序。
Sql语句:
SELECT * FROM table_name WHERE 条件ORDER BY CONVERT(中文utf-8字段USING GBK)
在数据库工具中使用,排序正常,问题解决。
HQL中报错
但用到HQL上,却报错,
严重: Servlet.service() for servlet action threw exceptionline 1:172: unexpected token: using
……
HQL报错原因分析
原来是hibernate不支持convert方法
网上查询,需要注册一个转换方法。
参考:http://blog.sina.com.cn/s/blog_624a352c0100qkaq.html
http://www.oschina.net/bbs/thread/302
因为项目使用C3P0连接池,无法原封不动套用,而且版本也不太一样。
-
解决方案
package etc.dao;
import org.hibernate.Hibernate;
import org.hibernate.dialect.MySQLDialect;
import org.hibernate.dialect.function.SQLFunctionTemplate;
/**
* 为在HQL中使用中文排序,注册添加函数类
*/
public class MySQL5LocalDialect extends MySQLDialect {
public MySQL5LocalDialect() {
super();
// registerFunction("convert", new SQLFunctionTemplate(Hibernate.STRING, "convert(?1 using ?2)"));
// 使用上面一种注册方法后仍报错,所以换下面一种,缺点不灵活,写死转换gbk
registerFunction("convert_gbk", new SQLFunctionTemplate(Hibernate.STRING, "convert(?1 using gbk)"));
}
}
2、修改hibernate的配置文件
#hep.db.hibernate.dialect=org.hibernate.dialect.MySQLDialect#更改前
hep.db.hibernate.dialect=etc.dao.MySQL5LocalDialect #更改后
-
使用方法
-
-
- 标签:
- 方法
- 排序
- gbk
- hql
- 中文
- 使用
- import
- 报错
- 注册
- convert
-
加入的知识群:
学习元评论 (0条)
聪明如你,不妨在这 发表你的看法与心得 ~