我使用的是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
再次按升序排列小写字母。我不明白这一点。请解释一下。
如何更改数据库归类?
答案 0 :(得分:1)
MySQL正在输出它遇到的第一个条目,因为在这种情况下它认为“ABC”与“abc”相同。
您可以尝试使用ascii()函数,例如“by cname desc,ascii(cname)desc”。
我认为您可以使用alter table更改字符排序规则: “alter table cust1 character set latin1 collate latin1_swedish_ci”,或者你想要的任何字符集。
答案 1 :(得分:0)
在数据库整理中: a比A大 A大于b b大于B 对于同一个字母,较小的字母大于大写字母。
答案 2 :(得分:0)
MySQL有..._ci
个排序规则。这些是作为" ci"提示,案例不敏感。也就是说,a
= A
。 (_ci
也会删除重音符号。)
MySQL有..._bin
个排序规则。这些比较比特。因此a
与A
不同。
计划A:在该列上使用COLLATE utf8mb4_bin
。
B计划:ORDER BY cname DESC, id DESC
和ORDER BY cname ASC, id ASC
。这样,id
将强制第1行和第2行的顺序排列。(不是它不会强制在a
和A
之间强制执行订单。
计划C:ORDER BY cname DESC, cname COLLATE utf8mb4_bin DESC
。 (我还没有确认这种语法是否有效。)这应该命令' a'和' A'以可预测的方式。