mysql :group by 与order by 共同使用时排序问题,小心utf8的排序

今天将group by  和order by 一起使用的时候遇到了排序的问题,并进行了如下总结:

表Work

id     name      rename num 

1       张三            b           9

2       李四            a           3

3       王五            c           4

4       张三            b           5

5       张三             b           6

6       李四              a          7

先写了如下语句:

select  name,sum(num)  from work group by name order by name;

结果并没有按照名字排序:

  张三     20

  李四      10

  王五        4

通过查阅找到了如下方法:

select * from (select  name,sum(num)  from work group by name) as a order by name;

结果仍然不对,和上边的结果一直,但本人查阅各种资料,都说这种方法是对的,我又写了如下语句:

select * from (select rename,sum(num) from work group by rename)  as a order by rename ;

结果如下:

 a      10

 c      4

 b     20

这就证明这种写法的结果应该是正确的,但为什么通过name排序的时候结果却是错误的,最终问了同事,同事说可能是一个中文一个英文的关系,但中文也是可以排序的,后来发现我的这个中文是utf8格式的,而mysql中默认为gbk的排序方式,最中通过下列代码成功排序:

select * from (select  name,sum(num)  from work group by name) as a order by convert(name using gbk);

你可能感兴趣的:(mysql :group by 与order by 共同使用时排序问题,小心utf8的排序)