字符集和排序规则到底是什么意思?
-
19-08-2019 - |
题
我可以阅读 MySQL 文档而且非常清楚。但是,如何决定使用哪种字符集呢?校对对什么数据有影响?
我要求解释这两者以及如何选择它们。
解决方案
从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” 但整个字母有时, 多个字母或文字东部 数千字的系统, 伴随着许多特殊符号和 标点符号。此外,在现实生活中, 大多数归类有很多的规则:不 只是不区分大小写,但也 口音不敏感(一种“腔”是一个 标示为连接到一个字符作为在 德国“O”)和多字符 该映射(如规则“O” = “OE”两个德国的一个 归类)。
其他提示
一个字符集是所有写入字形的子集。字符编码指定这些字符如何映射到数值。一些字符编码,如UTF-8和UTF-16,可以编码的通用字符集的任何字符。其他人,如US-ASCII或ISO-8859-1只能编码的一小部分,因为他们每个字符使用7,8位,分别。因为许多标准指定一个字符集和字符编码中,“字符集”术语通常为自由“字符编码”取代。
一个核对包括指定如何字符可以用于排序进行比较规则。归类规则可以特定于语言环境:两个字符的正确顺序从语言变化到语言
选择一个字符集和校对归结到你的应用程序是否是国际化与否。如果没有,你有什么目标区域?
为了选择设置要支持什么样的性格,你要考虑你的申请。如果要存储用户提供的输入,可能很难预见到在你的软件最终将要使用的所有语言环境。为了支持他们,这可能是最好的支持从一开始的UCS(统一)。然而,这种成本;许多西方欧洲字符现在将要求的,而不是一个每字符两个字节的存储空间。
选择正确的排序规则有助于提高性能,如果你的数据库使用的归类创建一个索引,后来使用该索引提供排序结果。然而,由于对比检验规则往往区域特定的,该指数将如果需要根据另一语言环境规则结果进行排序是毫无价值的。
我建议使用utf8mb4_unicode_ci
,它是基于Unicode标准进行排序和比较,其准确地排序在一个很宽范围的语言。