【发布时间】:2015-04-07 15:48:47
【问题描述】:
当我将 UTF-8 单词添加到表列并执行有序 SELECT 时,排序顺序错误。在 DESC 排序中,顺序是正确的,但在 ASC 排序中,顺序是错误的。如何解决?让我举例说明。让我们有一个带有斯洛伐克语整理的 mysql 表:
CREATE TABLE IF NOT EXISTS test (
aaa varchar(255) CHARACTER SET utf8 COLLATE utf8_slovak_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_slovak_ci;
现在让我们用 UTF-8 词插入一些值:
INSERT INTO test (aaa) VALUES
('Leco'),
('Lečo'),
('Ledo'),
('Chovatelstvo'),
('Chovateľstvo')
这里是斯洛伐克字母的解释,你可以看到哪些字母在哪些字母之后:http://en.wikipedia.org/wiki/Slovak_orthography
现在,当我按顺序选择时,我希望得到以下结果:
SELECT aaa FROM test ORDER BY aaa ASC
Chovatelstvo
Chovateľstvo
Leco
Lečo
Ledo
我也期望 DESC 的顺序完全相反。但这是我得到的事实:
SELECT aaa FROM test ORDER BY aaa ASC
Chovateľstvo
Chovatelstvo
Leco
Lečo
Ledo
和 DESC:
SELECT aaa FROM test ORDER BY aaa DESC
Ledo
Lečo
Leco
Chovateľstvo
Chovatelstvo
你可以在那里看到
Chovateľstvo
Chovatelstvo
总是按照给定的顺序排列,不管 ASC 还是 DESC。我注意到如果我以相反的顺序插入行,它可能会以
Chovatelstvo
Chovateľstvo
表示实际顺序相反,但对于 ASC 和 DESC 来说又是相同的。就像 mysql 认为这两个字母 'l' 和 'ľ' 是相等的。
我尝试了一些旧版本的 MySQL,以及另一台服务器上最新版本的 MariaDB,结果是一样的。
知道是什么原因造成的以及如何解决它吗?
【问题讨论】:
-
指定列和表的字符集和排序规则
-
这没有帮助。我将更新问题以反映这一点。
-
感谢您指出两种可能的重复,但问题是不同的。我需要斯洛伐克语排序规则才能正确排序单词,并且我已经设置了排序规则。