如何在MySQL中控制UTF-8排序?

Bob*_*ack 5 php mysql sorting collation utf-8

例如,这是标准"SORT BY name"查询返回的顺序:

name
------
Cebbb
?ebbc
Cebbd
Run Code Online (Sandbox Code Playgroud)

我想按名称排序,并获得重音字符第一,与其他重音字符,例如分组

name
------
?ebbc
Cebbb
Cebbd
Run Code Online (Sandbox Code Playgroud)

默认情况下,MySql将其?视为C用于排序目的,并按所示顺序排序.

或者,?为了C进行比较,有没有一种方法可以在PHP中"转换" 为什么?

Yog*_*ogu 6

您可以子句中添加COLLATE表达式ORDER BY:

SELECT k
FROM t1
ORDER BY k COLLATE utf8_spanish_ci;
Run Code Online (Sandbox Code Playgroud)

然后,将使用正确的整理对列进行排序,并且列定义可以保持原样.


Álv*_*lez 2

最简单的方法是对列本身应用适当的排序规则,例如:

\n\n
CREATE TABLE foo (\n    foo_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,\n    `name` VARCHAR(30) NOT NULL COLLATE \'utf8_spanish_ci\',\n    PRIMARY KEY (`foo_id`)\n)\nCOLLATE=\'utf8_spanish_ci\'\nENGINE=InnoDB;\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

更新:

\n\n

\xc4\x8c是西班牙语字母:

\n\n
\n

在克罗地亚语、斯洛文尼亚语、波斯尼亚语、斯科尔特萨米语和拉科塔语字母中,它是字母表的第四个字母。在捷克语、北部 S\xc3\xa1mi 字母表\n 以及波罗的海语言、立陶宛语和拉脱维亚语中,该字母位于\n 第五位。在斯洛伐克语中,它是字母表中的第六个字母。它也用于普什图语(相当于 \xda\x86\xe2\x80\x8e)和 Saanich。

\n
\n\n

与数字不同,字母没有固定的绝对顺序。字母顺序的整个概念是相对的\xe2\x80\x94你必须首先选择一个规则集。运行此 SQL 查询以了解您的 MySQL 服务器中哪些可用:

\n\n
SHOW CHARACTER SET\n
Run Code Online (Sandbox Code Playgroud)\n\n

...并选择更符合您期望的一个。说明书上有简单的说明。

\n