通过在mysql中使用order by子句按字母顺序对小写字母和大写字母进行排序

时间:2015-12-02 07:30:58

标签: mysql sql-order-by collation

我使用的是mySQL和排序规则utf8mb4_general_ci

我尝试了以下查询: SELECT cid, cname from cust1 order by cname desc

结果是:

cid  cname     
3 bbb 
1 abc 
2 ABC 

这种排序类型(小写字母首先按降序排列)是否设置在上面的排序规则中?

此外,如果我运行以下查询: SELECT cid, cname from cust1 order by cname

结果是:

cid  cname     
1 abc 
2 ABC 
3 bbb 

再次按升序排列小写字母。我不明白这一点。请解释一下。

如何更改数据库归类?

3 个答案:

答案 0 :(得分:1)

MySQL正在输出它遇到的第一个条目,因为在这种情况下它认为“ABC”与“abc”相同。

您可以尝试使用ascii()函数,例如“by cname desc,ascii(cname)desc”。

我认为您可以使用alter table更改字符排序规则: “alter table cust1 character set latin1 collat​​e latin1_swedish_ci”,或者你想要的任何字符集。

答案 1 :(得分:0)

在数据库整理中:     a比A大     A大于b     b大于B 对于同一个字母,较小的字母大于大写字母。

答案 2 :(得分:0)

MySQL有..._ci个排序规则。这些是作为" ci"提示,案例不敏感。也就是说,a = A。 (_ci也会删除重音符号。)

MySQL有..._bin个排序规则。这些比较比特。因此aA不同。

计划A:在该列上使用COLLATE utf8mb4_bin

B计划:ORDER BY cname DESC, id DESCORDER BY cname ASC, id ASC。这样,id将强制第1行和第2行的顺序排列。(不是它不会强制在aA之间强制执行订单。

计划C:ORDER BY cname DESC, cname COLLATE utf8mb4_bin DESC。 (我还没有确认这种语法是否有效。)这应该命令' a'和' A'以可预测的方式。