MySQL中英文混合排序最简单的办法

来源:http://www.nowamagic.net/academy/detail/32161508

有时候我们需要对表的某个字段进行排序,比如标签 tag。如果 tag 包含中英文,那么就需要中英文混合排序

排序目标是,英文就按首字母的 a,b,c 排,中文则按汉字的首字母排。

最简单的排序方法只需要一条 SQL 语句就可以完成:

01 mysql> select tag, COUNT(tag) from news GROUP BY tag order byconvert(tag using gbk) collate gbk_chinese_ci;
02 +-----------------+-----------------+
03 | tag           | COUNT(tag) |
04 +-----------------+-----------------+
05 | .Net            |               3 |
06 | 10000小时       |               1 |
07 | Amazon          |               9 |
08 | android         |              57 |
09 | C语言           |               1 |
10 | Dennis Ritchie  |               2 |
11 | Go语言          |               5 |
12 | IT见解          |             146 |
13 | JavaScript      |               4 |
14 | John McCarthy   |               1 |
15 | JQuery          |               7 |
16 | Zynga           |               1 |
17 | 阿里巴巴        |              28 |
18 | 贝尔实验室      |               1 |
19 | 互联网          |              24 |
20 | 简明现代魔法    |               1 |
21 | 淘宝网          |               2 |
22 | 信息图          |               1 |
23 | 余额宝          |              11 |
24 | 支付宝          |              14 |
25 | 植物大战僵尸    |               4 |
26 | 自媒体          |               3 |
27 +-----------------+-----------------+

上面是按 gbk 字符集排序的,那么如果按 utf8 又如何呢?

01 mysql> select tag, COUNT(tag) from news GROUP BY tag order byconvert(tag using utf8) collate utf8_unicode_ci;
02 +-----------------+-----------------+
03 | tag           | COUNT(tag) |
04 +-----------------+-----------------+
05 | .Net            |               3 |
06 | 10000小时       |               1 |
07 | 12306           |               1 |
08 | C语言           |               1 |
09 | IT见解          |             146 |
10 | Quora           |               4 |
11 | Twitch          |               1 |
12 | Twitter         |              19 |
13 | Zynga           |               1 |
14 | 三星            |               3 |
15 | 专利            |               1 |
16 | 余额宝          |              11 |
17 | 开曼群岛        |               1 |
18 | 意志力          |               1 |
19 | 植物大战僵尸    |               4 |
20 | 注意力经济      |               1 |
21 | 简明现代魔法    |               1 |
22 | 诺基亚          |              12 |
23 | 诺贝尔奖        |               1 |
24 | 豆瓣            |               3 |
25 | 贝佐斯          |               1 |
26 | 贝尔实验室      |               1 |
27 | 轻博客          |               3 |
28 | 运营            |               1 |
29 | 量子计算机      |               1 |
30 | 黑莓            |               1 |
31 +-----------------+-----------------+

PS:ci是 case insensitive, 即 “大小写不敏感”, a 和 A 会在字符判断中会被当做一样的。

数字和引文排序是没问题,但为什么 H黑莓 会比 L量子计算机 靠后呢?这个在后面的章节会慢慢道来。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,如果要按照英文字母的顺序进行排序,可以使用ORDER BY子句和COLLATE关键字来实现。COLLATE关键字用于指定排序规则,可以选择不同的排序规则来满足不同的需求。 例如,如果要按照英文字母的顺序从A到Z进行排序,可以使用以下语句: SELECT * FROM 表名 ORDER BY 列名 COLLATE utf8_general_ci; 其中,utf8_general_ci是一种常用的排序规则,它会将英文字母按照字母顺序进行排序。 如果要按照不区分大小写的方式进行排序,可以使用utf8_general_ci规则。如果要按照区分大小写的方式进行排序,可以使用utf8_bin规则。 总结起来,要在MySQL中按照英文字母的顺序进行排序,可以使用ORDER BY子句和COLLATE关键字,并选择合适的排序规则。 #### 引用[.reference_title] - *1* [mysql实现首字母从A-Z排序](https://blog.csdn.net/weixin_34000916/article/details/93186547)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [mysql中英文拼音首字母获取及排序](https://blog.csdn.net/qq_38403662/article/details/105372510)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MySQL按照汉字拼音A-Z排序或者汉字拼音和英文字母混合A-Z排序](https://blog.csdn.net/weixin_44490662/article/details/112985035)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值