【发布时间】:2012-09-08 12:09:39
【问题描述】:
我想在我的 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 中实现这种自定义排序?
我见过像 this 这样使用 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 本身会更整洁。有什么想法吗?
【问题讨论】:
标签: mysql