Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL排序顺序-排序规则?_Mysql_Sorting_Collation - Fatal编程技术网

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

我很难在MySQL中对字符字段进行排序。问题是重音字符与非重音字符混淆了。例如:

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
中添加一个
不同的
,以避免dup
a

下面是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  |
| á    |
+------+