mysql中文排序的N种方法

来源:互联网 发布:新材料未来的出处 知乎 编辑:程序博客网 时间:2024/06/05 06:21

目标:mysql中实现中文排序

方案1:修改mysql字符集及排序规则,字符集设置成gbk,排序规则设置成gbk_chinese_ci    

 缺点:字符集gbk不支持除中文、英文以外的其他语言,局限性大。

方案2:在sql中对需要进行中文排序的字段进行转码成gbk,如 order by column_name =>order by convert(column_name using gbk)   

缺点:在每个sql的order by的地方都需要加上convert函数

方案3:在每个表中加入一个字段pinyin,该字段保存需要排序的字段的拼音,order by pinyin

缺点:在每次插入数据都需要先转成pinyin,然后持久化

方案4:字符集使用utf-8,拦截执行的sql语句,进行sql解析,把order by ?替换成 order by convert(? using gbk)   

缺点:目前没有一款java解析工具可以解析所有的sql,使用中会出现sql解析失败的情况。


其他三个方案比较简单,现在只讨论方案4的实现步骤:

①mybatis拦截到sql

②sql语句解析成object

③对object进行反解析,反解析object的orderByElement 对象时,对反解析出来的拼接的sql进行替换

④把mybatis要执行的sql替换成我们反解析出来的新的sql


具体实现可以参考: https://github.com/JohnHello/MyBatisMore

原创粉丝点击