一尘不染

mysql选择不同的字母,包括扩展的拉丁字符

sql

原始问题:

表结构:

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,ā,č)。另外,我使用的实际表每个字母有很多文本,因此必须进行分组。

编辑#2:这是实时网站中的完整表格数据 -http:
//pastebin.com/cH2DUzf3执行该SQL,然后运行以下查询:

SELECT DISTINCT BINARY `letter` FROM `texts` ORDER BY `letter` ASC

产生 几乎 完美的结果,但有一个例外:字母’奴隶’ ‘u’ 之前
,这至少可以说是奇怪的,因为所有其他扩展拉丁字母都在其基本拉丁语版本之后出现。我该如何解决最后一个问题?


阅读 234

收藏
2021-03-08

共1个答案

一尘不染

检查 手册
BINARY类型

SELECT DISTINCT BINARY `letter` FROM `texts`

查看 **SQL Fiddle**

2021-03-08