我想在我的 MySQL 查询中自定义字母排序顺序。马耳他语使用标准拉丁字母和以下字符:ċ、ġ、ħ和ż。我使用utf8_bin
排序规则,因为ċ与c不同(等等)。结果是,当我使用 时ORDER BY
,字母按以下顺序处理:
a b c d e f g h i j k l m n o p q r s t u v w x y z ċ ġ ħ ż
但是我要求他们有这个订单:
a b ċ c d e f ġ g h ħ i j k l m n o p q r s t u v w x y ż z
这意味着按升序,“ abċ ”应该在“ abz ”之前,但目前它在之后,因为它只是比较字符的二进制值。有什么方法可以在 MySQL 中实现这种自定义排序?
我见过像这样使用的解决方案,ORDER BY FIELD(name, 'a', 'b', 'ċ', ...)
但这似乎不适用于这种情况。
我还尝试向 order 函数添加排序规则,如下所示:ORDER BY radicals COLLATE utf8_unicode_ci
,但这本质上将重音字符视为相同。所以,我会得到像“ aċd ”、“ ace ”、“ aċf ”这样的排序字符串,但这也是错误的(应该是“ aċd ”、“ aċf ”、“ ace ”)。
我的后备计划当然是在 PHP 中进行排序,但如果我可以将排序保留到 MySQL 本身会更整洁。有任何想法吗?