mysql 數據庫中 原生態sql語句 查詢且按中文排序:
sql:
select * from table order by convert(field using gbk ) asc or desc ;
說明:table是表名、field是字段名 、gbk是編碼格式、
而用hibernate使用以上的語句會報錯誤 using 貌似是關鍵語句、不能使用
那麼如何讓hibernate能中文排序呢?
還記得配置hibernate的時候會有方言配置嗎?
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
我們寫一個類MyISAMDialect 、來繼承MySQL5Dialect
import hibernate裏的包就可以了、
public class MyISAMDialect extends MySQL5Dialect {
public MyISAMDialect(){
super();
registerFunction("convert_mine", new SQLFunctionTemplate(Hibernate.STRING, "convert(?1 using gbk)"));
}
@Override
public String getTableTypeString() {
return "engine=MyISAM";
}
}
engine=MyISAM是數據庫的存儲引擎、不需要的可以不用管(如果有集羣的可以百度下使用哪中存儲引擎、我們集羣使用的是ndbcluster)、
注: convert(?1 using gbk) 可以換成 convert(?1 using ?2) 其實就是看你是不是固定gbk這個編碼集
然後你的hql語句就可以使用 convert 了
舉例:
from User as u order by convert_mine(u.name)
若是使用了動態編碼集
from User as u order by convert_mine(u.name , 'gbk')
這樣就可以了、
這樣就支持了中文排序。