4

我正在对 mysql 表运行选择查询,并尝试按表中的“名称”列对其进行排序。
名称列包含英文字符名称和带有拉丁字符的名称,如 â。
我遇到了以下问题。
我运行的查询返回按以下方式排序的结果,
例如:如果名称包含“archer”、“aaakash”、“â hayden”、“bourne”、“jason”
查询返回的结果按以下方式排序
“aaakash ”、“弓箭手”、“海登”、“伯恩”、“杰森”

但是我想根据 unicode 代码点(如下所示)
“aaakash”、“archer”、“bourne”、“jason”、“â hayden” 来订购它

(查看命令中â hayden的位置差异)
如何根据字符在unicode字符集中的位置对结果进行排序?

4

1 回答 1

10

但是我想根据 unicode 代码点订购它(如下所示)

要使用 unicode 代码点进行排序,您可能需要使用utf8_bin排序规则。

准确地说,后缀表示按每个字符的二进制表示_bin排序。


要在订购时覆盖默认排序规则,您将使用ORDER BY ... COLLATE

解释文档:

SELECT k
FROM t1
ORDER BY k COLLATE utf8_bin;

如果您的文本列不使用utf8 编码,则必须CONVERT

SELECT k
FROM t1
ORDER BY CONVERT(k USING utf8) COLLATE utf8_bin;

请注意我utf8在这里用作示例,因为这是最常见的 Unicode 编码。但是您的 MySQL 服务器可能支持其他 Unicode 编码,例如ucs2("UTF-16")。

于 2013-08-13T13:42:46.127 回答