为了账号安全,请及时绑定邮箱和手机立即绑定

字符集和校对究竟是什么意思?

字符集和校对究竟是什么意思?

繁星coding 2019-07-12 16:35:32
字符集和校对究竟是什么意思?我能读到MySQL文件很清楚。但是,如何决定使用哪个字符集呢?校对什么数据有影响?我要求你解释这两件事,以及如何选择它们。
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

来自MySQL博士:

字符集是一组符号和编码。一个校对用于比较字符集中字符的一组规则。让我们用一个假想字符集的例子来明确区分。

假设我们有一个有四个字母的字母表:‘a’,‘B’,‘a’,‘b’。我们给每个字母一个数字:‘a’=0,‘B’=1,‘a’=2,‘b’=3。字母‘A’是一个符号,数字0是‘A’的编码,所有四个字母及其编码的组合是一个字符集。

现在,假设我们要比较两个字符串值,‘A’和‘B’。最简单的方法是查看编码:0表示‘A’,1表示‘B’。因为0小于1,所以我们说‘A’小于‘B’。现在,我们所做的就是对我们的字符集应用一个排序规则。排序规则是一组规则(在本例中只有一条规则):“比较编码”。我们将这种最简单的排序称为二进制排序。

但是如果我们想说小写字母和大写字母是等价的呢?然后我们至少有两条规则:(1)把小写字母‘a’和‘b’当作相当于‘A’和‘B’的字母;(2)然后比较编码。我们称之为不分案件的校对。它比二进制排序要复杂一些。

在现实生活中,大多数字符集都有许多字符:不仅仅是‘A’和‘B’,而是整个字母,有时是多个字母或数千个字符的东方书写系统,还有许多特殊的符号和标点符号。在现实生活中,大多数校对都有很多规则:不只是大小写不敏感,而且重音不敏感(“重音”是一个标记附在一个字符上,就像德语中的‘?’)和多字符映射(比如两个德语校勘中‘OE’=‘OE’的规则)。


查看完整回答
反对 回复 2019-07-12
?
SMILET

TA贡献1796条经验 获得超4个赞

字符编码是一种对字符进行编码的方法,以使它们适合内存。也就是说,如果字符集是ISO-8859-15,欧元符号欧元将被编码为0xa 4,而在UTF-8中,它将是0xe282 ac。

这个校对是如何比较字符,在后缀9中,有字母作为e é è ê f,如果按照它们的二进制表示进行排序,则e f é ê è但是,如果排序规则设置为,例如,法语,您将按照您认为的顺序设置它们,这就是e é è ê是平等的,然后f.


查看完整回答
反对 回复 2019-07-12
?
HUWWW

TA贡献1874条经验 获得超12个赞

字符集是所有文字符号的子集。字符编码指定如何将这些字符映射到数字值。一些字符编码,如UTF-8和UTF-16,可以对通用字符集中的任何字符进行编码。其他的,如US-ASCII或ISO-8859-1,只能编码一个小子集,因为它们每个字符分别使用7位和8位。由于许多标准同时指定了字符集和字符编码,所以“字符集”一词经常被自由地替换为“字符编码”。

排序规则包括指定如何比较字符以进行排序的规则。排序规则可以是特定于地区的:两个字符的正确顺序因语言而异。

选择字符集和排序规则取决于应用程序是否国际化。如果没有,你的目标是什么地方?

为了选择您想要支持的字符集,您必须考虑您的应用程序。如果您正在存储用户提供的输入,可能很难预见到您的软件最终将被使用的所有区域设置。为了支持它们,最好从一开始就支持UCS(Unicode)。然而,这是有代价的;许多西欧字符现在每个字符需要两个字节的存储空间,而不是一个字节。

如果数据库使用排序规则创建索引,然后使用该索引提供排序结果,则选择正确的排序规则可以提高性能。但是,由于排序规则通常是特定于地区的,如果需要根据另一个区域设置的规则对结果进行排序,则该索引将毫无价值。


查看完整回答
反对 回复 2019-07-12
  • 3 回答
  • 0 关注
  • 784 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信