mysql按照汉字拼音进行order by排序

背景:

今天在项目开发的过程中,需要对查询结果进行汉字的拼音升序进行排序显示,当时第一反应就是直接在order by后面加上排序字段就可以。

eg: select * from pub_user_info u where u.sex='1' order by u.name asc;

emm,一切按照所预期的进行着。but,执行之后...查询的结果并没有按照我所预期的按照汉字对应拼音的升序进行排列。

原因:

查询资料后发现,出现这个问题的原因是因为MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,因此在比较过程中中文编码字符大小写转换造成了这种现象。

解决方法:

  • 1 修改数据库表字段:
    对于包含中文的字段加上binary属性,使之作为二进制比较。
    eg: 将name char(10) 改成 name char(10)binary
  • 2 修改查询语句:
    如果不想修改数据库中表字段属性的话,也可以在查询语句的order by部分使用 CONVERT函数。
    eg: select * from pub_user_info u where u.sex='1' order by CONVERT(u.name USING GBK) asc;

ps:数据库表结构一般在确定后就尽量不要去做改动,所以推荐使用第二种方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,463评论 19 139
  • 50个常用的sql语句Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname...
    哈哈海阅读 4,983评论 0 7
  • 亲爱的,你一定要离将过去的那扇门永远的关好,不论是好是坏。 过去的或许真的很美好,美到愿意一次又一次的想去...
    慎慎的刺猬阅读 1,878评论 1 2
  • Docker 拉取镜像的时候报错 Github 上也有人指出该错误 原因是 inodes 资源耗尽 , 清理一下即...
    Shaman阅读 14,649评论 0 1
  • 当我听到你的名字不再有心动的时候,当我独自一人不再想到曾经和你一起的时候,当不再关注你的一举一动的时候,你也许该难...
    小小羊_阅读 1,768评论 0 0