我可以阅读 mysql documetations,并且它们都相当清楚。但是,一个 does 如何决定要使用哪些字符集?排序规则在什么东西上有一种效果?

我想问一下有关的两个以及如何选择这些说明。

2008-12-04 16:47:01
问题评论:

回答:

从 MySQL文档:

字符集是一套符号和编码。排序规则是一组规则,用于比较的字符集中的字符。让我们来制作一种假想的字符集与清除的区别。

假设我们有四个字母用字母表: 'A','B',a、 b。我们为每个字母一个数字: 'A' = 0,'B' = 1,'a' = 2,'b' = 3。符号的字母 'A' 为 0 的号码是 A 的编码,所有的四个字母和其编码的组合是一种字符集。

现在,假设我们想要比较两个字符串值 A 和 B。若要执行此操作的最简单方法是查看编码: 'A' 和的 'B' 1 0。由于 0 小于 1,我们说 'A' 小于 'B'。现在,我们只是做是适用于我们的字符集的排序规则。排序规则是一组规则 (在本例中只有一个规则):"比较编码"。我们称这简单的所有可能的归类二进制排序规则。

但是,如果我们想要说的大写和小写字母相等呢?那么我们将有至少两个规则: (1) 将小写字母 a 和 b,相当于 'A' 和 'B';(2) 然后将编码进行比较。我们可以称之为不区分大小写的排序规则。它是二进制排序规则比略为复杂。

在现实生活中,大多数的字符集的字符多︰ 不只是 'A' 和 'B',但整个字母表、 有时多个字母或东部的书写系统,与上千个字符,以及很多特殊符号和标点符号。也在实际生活中,大多数归类有许多规则︰ 不只是案例不区分大小写但也强调不区分大小写 ("特色"是附加到字符,如德语 ö' 一个标记) 和多字符映射 (如规则该 'ö' = 'OE' 中的一个两个德语归类)。

一种字符编码是一种方法来对字符进行编码,以使其适合在内存中。即如果字符集,ISO 8859-15 欧元符号,€,将编码为 0xa4,并在 utf-8,它将是 0xe282ac。

排序规则是如何比较,latin9 中的字符、 字母作为e é è ê f,如果还有按其二进制表示形式,它将转到e f é ê è但如果排序规则设置为时,例如,法语,您将让他们以为他们的顺序,即所有e é è ê都是否相等,然后f.

一个例子就是成千上万个词值得:)

我很想知道此答案为什么有较少 upvotes 比刚才引用的文档的第一个答案

一定要注意,可能有许多不同的排序规则的单个字符集。"右"的一个取决于正常情况下由编写它所用的语言的文本的语义。

字符集是所有书面字形的子集。一种字符编码指定如何将这些字符映射为数字值。某些字符编码,如 utf-8 和 utf-16,可以对任何通用字符集中的字符进行编码。其他人,像美国 ASCII 或 ISO 8859-1 只可以编码一小部分,因为他们使用 7 位和 8 位每个字符,分别。因为很多标准指定的字符集和字符编码,术语"字符集"经常自由地用于"字符编码"替代。

排序规则包括指定如何进行字符比较的排序规则。排序规则可以是特定于区域设置︰ 两个字符的正确顺序不同语言的。

选择字符集和归类取决于是否国际化应用程序,或不。如果不是,面向哪些区域?

要选择您想要支持的字符集,您必须考虑您的应用程序。如果您存储用户提供的输入,可能难以预见的最终将使用您的软件的所有区域设置。为了支持所有这些,则可能是最适合用来支持 UCS (Unicode) 从一开始。但是,没有成本现在,许多西欧字符需要两个字节的每个字符而不是一个存储。

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

请输入您的翻译

What does character set and collation mean exactly?

确认取消