问题:
有时候我们会遇到需求是查询数据库中的某些字段然后根据某个字段排序,例如根据姓名排序,但是姓名字段中有英文有中文也有的姓名字段既包括中文也包括英文那么如果都使用 ORDER BY 进行排序会有什么不一样的结果?让我们来测试一下。
场景一:
当姓名字段都是英文时根据姓名字段排序,例如下面数据根据 first_name 升序排序
SQL语句:
SELECT * FROM employees ORDER BY first_name ASC
结果集:
这里可以看见排序已经生效,结果集是按照 first_name 字段进行的排序
场景二:
当姓名字段都是中文时根据姓名字段排序,例如下面数据根据 first_name 升序排序
SQL语句:
SELECT * FROM emoployees_all_chinese ORDER BY first_name ASC
结果集:
可以看见如果依然按照之前的规则编写SQL那么内容如果都是中文汉字的 first_name 字段排序是没有生效的(顺序有变但是不仔细看看不出来有任何规律,至少没有按照我们预想的顺序排序)
场景二解决方案:
SELECT * FROM emoployees_all_chinese ORDER BY CONVERT(first_name USING gbk) ASC
这里我们在含有中文字段外面包了一层 CONVERT( ‘字段名’ USING gbk)
结果集:
可以看见这里已经按照预想的顺序进行排序,也就是说 ORDER BY 语句根据内容都是中文的字段进行排序已经生效。
同样的如果使用以下 SQL 语句
SELECT * FROM emoployees_eng_cn ORDER BY CONVERT(first_name USING gbk) ASC
结果集会先输出英文名称升序排序然后再输出中文名称升序排序,这里就不贴图了,大家脑补一下,谢谢
扩展:
我想了一下如果先输出中文升序排序然后再输出英文升序排序或者中文倒叙英文倒叙或者其他顺序等等,如何实现这种排序,目前我还没有测试成功,代码层面可以通过流的方式处理,但SQL语句方面我无法实现,希望各位ikun们实现了的能来指导我一下。
声明:
本人是一个菜坤,在此只想记录一下,如果有什么错误的地方请及时联系我,我怕让大家笑话。
编辑人:HahaCoder(练习时长两年半)
编辑时间:2023年6月20日00:53:11
mysql 中将汉字(中文)按照拼音首字母排序
MySQL汉字排序
让MySQL支持中文排序
数据库实现中文汉字排序终极指南
上面有一些网址是相关问题的解决方案,有的介绍很细致有的把 oracle 中文排序也讲了一下,有的我借鉴了一下,有的我也没看随便搜了一下,还有的我没有贴出来,总之网络上有很多教程,ikun 们多动手。
上一篇:MySQL 分区表设计