原始问题:
表格结构:
CREATE TABLE `texts` ( `letter` VARCHAR(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `text` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, INDEX (`letter` ASC), INDEX (`text` ASC) ) ENGINE InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
示例数据:
INSERT INTO `texts` (`letter`, `text`) VALUES ('a', 'Apple'), ('ā', 'Ābols'), ('b', 'Bull'), ('c', 'Cell'), ('č', 'Čakste');
我正在执行的查询:
SELECT DISTINCT `letter` FROM `texts`;
预期结果:
`letter` a ā b c č
实际结果:
`letter` a b c
我尝试了很多utf8排序规则(utf8_ [bin | general_ci | unicode_ci], utf8mb4_ [bin | general_ci | unicode_ci]等),它们都不起作用。如何 解决这个问题?
编辑澄清:我想要的不只是获取所有字母 out,但也按照我在预期中指定的顺序获取它们 结果。
utf8_bin
获取所有字母,但是它们是在 错误的方式 - 扩展拉丁字符只跟随所有基本 拉丁字符(例如:a,b,c,ā,č)。另外,实际的表我 使用每个字母有很多文本,所以分组是必须的。
编辑#2:这是来自实际网站的完整表格数据 - http://pastebin.com/cH2DUzf3 执行该SQL并在此之后运行以下查询:
SELECT DISTINCT BINARY `letter` FROM `texts` ORDER BY `letter` ASC
产生几乎完美的结果,但有一个例外:字母'ū'在'u'之前是,这至少可以说是奇怪的,因为所有其他扩展的拉丁语字母出现在他们的基本拉丁版本之后。我如何解决这最后一个问题?