字符集,character set,就是一套表示字符的符号和这些的符号的底层编码;而校验规则,则是在字符集内用于比较字符的一套规则。下面我简单举个例子来说明一下:如在某个字符集“X”的A与a,他们的底层编码分别是A=0,a=100。这里符号“A”“a”和底层编码“0”“100”就是字符集的概念范围。假设我们要比较A与a的大小,我们得到a>A,因为我们是根据其底层编码进行比较的,这就是这个字符集“X”的一种校验规则“Z”(根据底层编码来比较)。假设,现在有另外一种校验规则,是先取其相反数,然后再比较大小,那么就很显然的得到a<A,这就是字符集“X”的另外一种校验规则“Z1”。由此可见,一种字符集可能存在多个与之对应的校验规则(一对多关系)。
1、使用字符集来存储字符串,支持多种字符集;
2、使用校验规则来比较字符串,同种字符集还能使用多种校验规则来比较;
3、在同一台服务器、同一个数据库或者甚至在同一个表中使用不同字符集或校对规则来混合组合字符串;
4、可以在任何级别(服务器、数据库、表、字段、字符串),定义不同的字符集和校验规则。
mysql> show character set;
+———-+—————————–+———————+——–+
| Charset
+———-+—————————–+———————+——–+
| big5
| dec8
| ………| ………………….
| eucjpms
+———-+—————————–+———————+——–+
36 rows in set (0.00 sec)
mysql> show character set like ‘latin%’;
+———+—————————–+——————-+——–+
| Charset | Description
+———+—————————–+——————-+——–+
| latin1
| latin2
| latin5
| latin7
+———+—————————–+——————-+——–+
4 rows in set (0.00 sec)
mysql> show collation;
+———————-+———-+—–+———+———-+———+
| Collation
+———————-+———-+—–+———+———-+———+
| big5_chinese_ci
| big5_bin
| dec8_swedish_ci
| ……..
| eucjpms_bin
+———————-+———-+—–+———+———-+———+
127 rows in set (0.00 sec)
mysql> show collation like ‘latin1%’;
+——————-+———+—-+———+———-+———+
| Collation
+——————-+———+—-+———+———-+———+
| latin1_german1_ci | latin1
| latin1_swedish_ci | latin1
| latin1_danish_ci
| latin1_german2_ci | latin1
| latin1_bin
| latin1_general_ci | latin1
| latin1_general_cs | latin1
| latin1_spanish_ci | latin1
+——————-+———+—-+———+———-+———+
8 rows in set (0.00 sec)
1、两个不同的字符集不能有相同的校验规则(字符集:校验规则 = 1:n);
2、每个字符集都有一个校验规则,就是对应的DEFAULT=YES的那个collation;
3、collation命名规则:字符集名_对应的语言名_ci/cs/bin,其中ci表示大小写不敏感性,cs表示大小写敏感性,bin表示二进