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

    一句SQL完成
    服务器君一共花费 77.921 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

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

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

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

    mysql> select tag, COUNT(tag) from news GROUP BY tag order by convert(tag using gbk) collate gbk_chinese_ci;
    +-----------------+-----------------+
    | tag        	| COUNT(tag) |
    +-----------------+-----------------+
    | .Net            |               3 |
    | 10000小时       |               1 |
    | Amazon          |               9 |
    | android         |              57 |
    | C语言           |               1 |
    | Dennis Ritchie  |               2 |
    | Go语言          |               5 |
    | IT见解          |             146 |
    | JavaScript      |               4 |
    | John McCarthy   |               1 |
    | JQuery          |               7 |
    | Zynga           |               1 |
    | 阿里巴巴        |              28 |
    | 贝尔实验室      |               1 |
    | 互联网          |              24 |
    | 简明现代魔法    |               1 |
    | 淘宝网          |               2 |
    | 信息图          |               1 |
    | 余额宝          |              11 |
    | 支付宝          |              14 |
    | 植物大战僵尸    |               4 |
    | 自媒体          |               3 |
    +-----------------+-----------------+
    

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

    mysql> select tag, COUNT(tag) from news GROUP BY tag order by convert(tag using utf8) collate utf8_unicode_ci;
    +-----------------+-----------------+
    | tag        	| COUNT(tag) |
    +-----------------+-----------------+
    | .Net            |               3 |
    | 10000小时       |               1 |
    | 12306           |               1 |
    | C语言           |               1 |
    | IT见解          |             146 |
    | Quora           |               4 |
    | Twitch          |               1 |
    | Twitter         |              19 |
    | Zynga           |               1 |
    | 三星            |               3 |
    | 专利            |               1 |
    | 余额宝          |              11 |
    | 开曼群岛        |               1 |
    | 意志力          |               1 |
    | 植物大战僵尸    |               4 |
    | 注意力经济      |               1 |
    | 简明现代魔法    |               1 |
    | 诺基亚          |              12 |
    | 诺贝尔奖        |               1 |
    | 豆瓣            |               3 |
    | 贝佐斯          |               1 |
    | 贝尔实验室      |               1 |
    | 轻博客          |               3 |
    | 运营            |               1 |
    | 量子计算机      |               1 |
    | 黑莓            |               1 |
    +-----------------+-----------------+
    

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

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

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [PHP程序设计] 编程范式初探 3 个条目
  2. [PHP程序设计] PHP与Stream流 5 个条目
  3. [PHP程序设计] PHP里的引用 5 个条目
  4. [计算机算法] 从双端队列引出的卡特兰数 3 个条目
  5. [移动开发] Layout_weight属性解析 5 个条目
  6. [JavaScript程序设计] Web实时通信技术名词解析 5 个条目
  7. [PHP程序设计] fsockopen,curl与file_get_contents 12 个条目
  8. [移动开发] 从代码角度去认识 Thread 9 个条目
  9. [Python程序设计] Tornado 服务器环境配置 3 个条目
  10. [移动开发] 使用support-v7 ActionBar前的那些坑 3 个条目
  11. [智力开发与知识管理] 信息的类型与结构 9 个条目
  12. [移动开发] Android里的ContentValues 2 个条目
窗口 -- [资讯]