原始问题:
表结构: 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; 样本数据:
表结构:
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;
text
letter
样本数据:
INSERT INTO `texts` (`letter`, `text`) VALUES ('a', 'Apple'), ('ā', 'Ābols'), ('b', 'Bull'), ('c', 'Cell'), ('č', 'Čakste');
我正在执行的查询: SELECT DISTINCT `letter` FROM `texts`; 预期成绩:
我正在执行的查询:
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,ā,č)。另外,我使用的实际表每个字母有很多文本,因此必须进行分组。
实际结果:
`letter` a b c
我已经尝试了许多utf8归类(utf8_ [bin | general_ci | unicode_ci],utf8mb4_ [bin | general_ci | unicode_ci]等),但它们都不起作用。如何解决这个问题?
编辑以澄清问题:我想要的不仅是清除所有字母,而且还按照我在预期结果中指定的顺序获取它们。utf8_bin获取所有字母,但是它们以错误的方式排序- 扩展的拉丁字符仅在所有基本拉丁字符之后跟随(例如:a,b,c,ā,č)。另外,我使用的实际表每个字母有很多文本,因此必须进行分组。
utf8_bin
编辑#2:这是实时网站中的完整表格数据 -http: //pastebin.com/cH2DUzf3执行该SQL,然后运行以下查询:
SELECT DISTINCT BINARY `letter` FROM `texts` ORDER BY `letter` ASC
产生 几乎 完美的结果,但有一个例外:字母’奴隶’ 在 ‘u’ 之前 ,这至少可以说是奇怪的,因为所有其他扩展拉丁字母都在其基本拉丁语版本之后出现。我该如何解决最后一个问题?
检查 手册 的BINARY类型
BINARY
SELECT DISTINCT BINARY `letter` FROM `texts`
查看 **SQL Fiddle**
**SQL Fiddle**