首先创建一个类:
package com.common.myutil;
import org.hibernate.dialect.MySQL5Dialect;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import org.hibernate.type.StandardBasicTypes;
/**
* 处理MYSQL中文排序问题
* @author
*
*/
public class MySQL5LocalDialect extends MySQL5Dialect {
public MySQL5LocalDialect() {
super();
registerFunction("convert_gbk", new SQLFunctionTemplate( StandardBasicTypes.STRING, "convert(?1 using gbk)"));
}
@Override
public String getTableTypeString() {
return "engine=InnoDB";
}
}
<!-- 配置hibernate session工厂 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
......
<!-- 这个主要是处理MySql中文排序问题 -->
<prop key="hibernate.dialect">com.common.myutil.MySQL5LocalDialect</prop>
</props>
</property>
在使用hql查询语句时,在可能出现中文的列中例如name,可以这样使用:
from xxx order by convert_gbk(name);