MySQL排序顺序-排序规则?
我很难在MySQL中对字符字段进行排序。问题是重音字符与非重音字符混淆了。例如:MySQL排序顺序-排序规则?,mysql,sorting,collation,Mysql,Sorting,Collation,我很难在MySQL中对字符字段进行排序。问题是重音字符与非重音字符混淆了。例如: Abc Ábd Acc 我想这可能与排序有关。因此,在阅读之后,我将表的排序规则更改为utf8-ut8\u-bin。事实上,我把表格改了好几次,做了不同的排序。没有雪茄 我还要补充一点,我不介意排序的顺序,只要排序不会导致混合列表。换句话说,这很好: Ábd Abc Acc 这也是: Abc Acc Ábd 期待您的回复。您只需要使用区分大小写的排序规则,例如:utf8\u general\u cs UPD
Abc
Ábd
Acc
我想这可能与排序有关。因此,在阅读之后,我将表的排序规则更改为utf8-ut8\u-bin
。事实上,我把表格改了好几次,做了不同的排序。没有雪茄
我还要补充一点,我不介意排序的顺序,只要排序不会导致混合列表。换句话说,这很好:
Ábd
Abc
Acc
这也是:
Abc
Acc
Ábd
期待您的回复。您只需要使用区分大小写的排序规则,例如:
utf8\u general\u cs
UPD
很抱歉,没有utf8\u常规\u cs
,utf8\u bin
应该可以工作
您应该更改特定字段的排序规则,而不是表的排序规则(或者确保字段使用表默认值)
@newtower有一个很好的出发点,但无论是他还是“社区”都没有意识到这是不确定的。因此,我提供了一个应该“修复”它的答案: unicode_ci(以及几乎所有其他排序规则): 垃圾箱: (您可以在
组_CONCAT
中添加一个不同的
,以避免dupa
)
下面是utf8排序规则的完整摘要(使用该技术):
建议您单击上的“影响我”,您希望如何对它们进行排序?根据哪个排序?很抱歉,我编辑了原始帖子来描述期望的行为。谢谢你的详细回复。我已将模式和表更改为排序规则utf8_bin,但仍然无法工作。然后我运行了你的查询,得到了一个错误。查看该列,该列具有默认排序规则。我把这个列改成utf8\u bin,然后它就工作了。再次感谢。这种方法无法解释平等。
mysql> SELECT * FROM (
-> SELECT 'A' as l
-> UNION ALL
-> SELECT 'á' as l
-> UNION ALL
-> SELECT 'A' as l) ls
-> ORDER BY l;
+----+
| l |
+----+
| A |
| á |
| A |
+----+
3 rows in set (0.00 sec)
mysql> SELECT * FROM (
-> SELECT 'A' as l
-> UNION ALL
-> SELECT 'á' as l
-> UNION ALL
-> SELECT 'A' as l) ls
-> ORDER BY l COLLATE utf8_bin;
+----+
| l |
+----+
| A |
| A |
| á |
+----+
3 rows in set (0.00 sec)
SET NAMES utf8 COLLATE utf8_unicode_ci;
SELECT GROUP_CONCAT(l SEPARATOR '=') AS gc
FROM (
SELECT 'A' as l UNION ALL
SELECT 'á' as l UNION ALL
SELECT 'A' as l ) ls
GROUP BY l
ORDER BY gc;
+--------+
| gc |
+--------+
| A=á=A |
+--------+
SET NAMES utf8 COLLATE utf8_bin;
SELECT GROUP_CONCAT(l SEPARATOR '=') AS gc
FROM (
SELECT 'A' as l UNION ALL
SELECT 'á' as l UNION ALL
SELECT 'A' as l ) ls
GROUP BY l
ORDER BY gc;
+------+
| gc |
+------+
| A=A |
| á |
+------+