【发布时间】:2014-08-19 09:54:29
【问题描述】:
原问题:
表结构:
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] 等),它们都不起作用。如何 解决这个问题?
编辑澄清:我想要的不仅仅是得到所有的字母 出来,但也可以按照我在预期中指定的顺序获取它们 结果。
utf8_bin获取所有字母,但它们在 错误的方式 - 扩展拉丁字符仅在所有基本之后 拉丁字符(例如:a、b、c、ā、č)。另外,我的实际表 using 每个字母有很多文本,因此必须进行分组。
编辑 #2:这是来自实时站点的完整表格数据 - http://pastebin.com/cH2DUzf3 执行该 SQL 并在此之后运行以下查询:
SELECT DISTINCT BINARY `letter` FROM `texts` ORDER BY `letter` ASC
产生几乎完美的结果,但有一个例外:字母“ū”在“u”之前,这至少可以说很奇怪,因为所有其他扩展拉丁语字母出现在其基本的拉丁版本之后。我该如何解决最后一个问题?
【问题讨论】:
-
你试过
utf8_bin吗? -
@juergend - 添加了一个编辑来澄清一件事。
-
很想知道结果是什么:SELECT
letterFROMtexts; -
@ak0053792 - 如果所有文本都以唯一的字母开头,这对我有用,但在实际表格中,每个字母最多有一百个不同的文本,所以我需要将它们分组.