转自:http://blog.sina.com.cn/s/blog_5f1fe33f0100eoxf.html
1.字符集的概念:
假设我们有一个字母表使用了四个字母:‘
A’、‘
B’、‘
a’、‘
b’。我们为每个字母赋予一个数值:‘
A’
=0,‘
B’
= 1,‘
a’
= 2,‘
b’
= 3。字母‘
A’是一个符号,数字
0是‘
A’的编码,这四个字母和它们的编码组合在一起是一个
字符集
假设我们希望比较两个字符串的值:‘A’和‘B’。比较的最简单的方法是查找编码:‘A’为0,‘B’为1。因为0 小于1,我们可以说‘A’小于‘B’。我们做的仅仅是在我们的字符集上应用了一个校对规则。校对规则是一套规则(在这种情况下仅仅是一套规则):“对编码进行比较。”我们称这种全部可能的规则中的最简单的校对规则为一个binary(二元)校对规则。
但是,如果我们希望小写字母和大写字母是等价的,应该怎样?那么,我们将至少有两个规则:(1)把小写字母‘a’和‘b’视为与‘A’和‘B’等价;(2)然后比较编码。我们称这是一个大小写不敏感的校对规则。比二元校对规则复杂一些。
在实际生活中,大多数字符集有许多字符:不仅仅是‘A’和‘B’,而是整个字母表,有时候有许多种字母表,或者一个东方的使用上千个字符的书写系统,还有许多特殊符号和标点符号。并且在实际生活中,大多数校对规则有许多个规则:不仅仅是大小写不敏感,还包括重音符不敏感(“重音符” 是附属于一个字母的符号,象德语的‘Ö’符号)和多字节映射(例如,作为规则‘Ö’=‘OE’就是两个德语校对规则的一种)。
2.可以使用show character set列出所有可用字符集
任何一个给定的字符集至少有一个校对规则。它可能有几个校对规则。
要想列出一个字符集的校对规则,使用SHOW COLLATION语句。例如,要想查看latin1(“西欧ISO-8859-1”)字符集的校对规则,使用下面的语句查找那些名字以latin1开头的 校对规则:
mysql>
SHOW COLLATION LIKE 'latin1%';
+---------------------+---------+----+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+---------------------+---------+----+---------+----------+---------+
|
latin1_german1_ci | latin1 | 5 | | | 0 |
| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |
| latin1_danish_ci | latin1 | 15 | | | 0 |
| latin1_german2_ci | latin1 | 31 | | Yes | 2 |
| latin1_bin | latin1 | 47 | | Yes | 1 |
| latin1_general_ci | latin1 | 48 | | | 0 |
| latin1_general_cs | latin1 | 49 | | | 0 |
| latin1_spanish_ci | latin1 | 94 | | | 0 |
+---------------------+---------+----+---------+----------+---------+
latin1校对规则有下面的含义:
校对规则 | 含义 |
latin1_german1_ci | 德国DIN-1 |
latin1_swedish_ci | 瑞典/芬兰 |
latin1_danish_ci | 丹麦/挪威 |
latin1_german2_ci | 德国 DIN-2 |
latin1_bin | 符合latin1编码的二进制 |
latin1_general_ci | 多种语言(西欧) |
latin1_general_cs | 多种语言(西欧ISO),大小写敏感 |
latin1_spanish_ci | 现代西班牙 |
校对规则一般有这些特征:
· 两个不同的字符集不能有相同的校对规则。
· 每个字符集有一个默认校对规则。例如,latin1默认校对规则是latin1_swedish_ci。
· 存在校对规则命名约定:它们以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)或_bin(二元)结束。