当前位置: 首页 > 面试题库 >

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

东郭子默
2023-03-14
问题内容

原始问题:

表结构:

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’ 之前
,这至少可以说是奇怪的,因为所有其他扩展拉丁字母都在其基本拉丁语版本之后出现。我该如何解决最后一个问题?


问题答案:

检查 手册
BINARY类型

SELECT DISTINCT BINARY `letter` FROM `texts`

查看 **SQL Fiddle**



 类似资料:
  • 谷歌Web字体上的一些字体支持多个“字符集”。问题是,如果我使用的web字体只提供“拉丁”字形,用户将页面翻译成不支持字形的语言时,会清楚地注意到混乱的文本。 我希望我的网页字体支持最流行的语言在世界上除了英语,例如,西班牙语,德语,法语等。 出于这个目的,我想知道,“拉丁”和“拉丁扩展”到底是针对哪种语言的。 我想答案应该是这样的:

  • 问题内容: 我正在尝试使用以下命令选择MySQL中仅包含字母数字字符的所有行: 但是,它将返回所有行,而不管它们包含非字母数字字符的事实。 问题答案: 试试这个代码: 这样可以确保所有字符都匹配。

  • 我试着从网上提取数据。很少有拉丁文字母是以纯十六进制形式出现的。 对于例如: 这个链接将变成 我怎么才能从这里得到拉丁字母。我想概括一下这一点,并对所有在我的数据帧中更改的拉丁字母都这样做。

  • 问题内容: 如何在mysql中选择仅包含大写字符的字段或不包含任何小写字符的字段? 问题答案: 您可能需要使用区分大小写的排序规则。我相信默认值不区分大小写。例: 然后: 如果您不想在整个表中使用区分大小写的排序规则,则也可以使用其他答案中建议的@kchau子句。 让我们尝试使用不区分大小写的排序规则的表: 这不能很好地工作: 但是我们可以使用子句将名称字段整理为区分大小写的整理:

  • 问题内容: 如何选择以“ A”开头的名称直到以“ D”开头的名称的行?并按字母顺序对它们进行排序?就像和的组合? 样品表: 样本输出: 名称以“ Cr”开头,直到名称以“ D”开头 样本输出: 问题答案: 从最多选择名称,但不包括: 由于这是一个简单的比较,因此如果该字段有一个索引,则可以使用索引。

  • Java的SimpleDateFormat用于将Date对象格式化为字符串。格式化程序支持各种模式字母,它们表示Date字段的文本表示。例如,是两个字母的年份,是四个字母的年份,是星期几。 例如,使用将日期格式化为。 我想在SimpleDataformat中添加一些模式字母。例如,想要表示希伯来语工作日(