您的位置:首页 > 数据库 > MySQL

MySQL字符集和校验规则概

2016-11-30 09:47 387 查看
字符集,character set,就是一套表示字符的符号和这些的符号的底层编码;而校验规则,则是在字符集内用于比较字符的一套规则。下面我简单举个例子来说明一下:如在某个字符集“X”的A与a,他们的底层编码分别是A=0,a=100。这里符号“A”“a”和底层编码“0”“100”就是字符集的概念范围。假设我们要比较A与a的大小,我们得到a>A,因为我们是根据其底层编码进行比较的,这就是这个字符集“X”的一种校验规则“Z”(根据底层编码来比较)。假设,现在有另外一种校验规则,是先取其相反数,然后再比较大小,那么就很显然的得到a<A,这就是字符集“X”的另外一种校验规则“Z1”。由此可见,一种字符集可能存在多个与之对应的校验规则(一对多关系)。

关于字符集与校验规则,mysql支持:

1、使用字符集来存储字符串,支持多种字符集;

2、使用校验规则来比较字符串,同种字符集还能使用多种校验规则来比较;

3、在同一台服务器、同一个数据库或者甚至在同一个表中使用不同字符集或校对规则来混合组合字符串;

4、可以在任何级别(服务器、数据库、表、字段、字符串),定义不同的字符集和校验规则。

查询你的mysql数据库所支持的字符集种类,可以如下:

mysql> show character set;

+----------+-----------------------------+---------------------+--------+

| Charset | Description |
Default collation |
Maxlen |

+----------+-----------------------------+---------------------+--------+

| big5 |
Big5 Traditional Chinese |
big5_chinese_ci | 2
|

| dec8 |
DEC West European |
dec8_swedish_ci | 1
|

| .........| ...................... |
................ | .
|

| eucjpms | UJIS for
Windows Japanese |
eucjpms_japanese_ci | 3
|

+----------+-----------------------------+---------------------+--------+

36 rows in set (0.00 sec)

这里的maxlen表示要用最大多少个字节来存储字符集的单个词,default collation表示该字符集的默认校验规则。

你也可以利用like来进行筛选,如下:

mysql> show character set like 'latin%';

+---------+-----------------------------+-------------------+--------+

| Charset | Description |
Default collation | Maxlen |

+---------+-----------------------------+-------------------+--------+

| latin1 | cp1252 West
European |
latin1_swedish_ci | 1
|

| latin2 | ISO 8859-2
Central European | latin2_general_ci | 1
|

| latin5 | ISO 8859-9
Turkish |
latin5_turkish_ci | 1
|

| latin7 | ISO 8859-13
Baltic |
latin7_general_ci | 1
|

+---------+-----------------------------+-------------------+--------+

4 rows in set (0.00 sec)

查询你的mysql数据库所支持字符集的校验规则,可以如下:

mysql> show collation;

+----------------------+----------+-----+---------+----------+---------+

| Collation |
Charset | Id |
Default | Compiled | Sortlen |

+----------------------+----------+-----+---------+----------+---------+

| big5_chinese_ci |
big5 | 1
| Yes |
Yes | 1
|

| big5_bin |
big5 | 84
| |
Yes | 1
|

| dec8_swedish_ci |
dec8 | 3
| Yes | | 0
|

| ........ |
.... | ..
| ... |
... | .
|

| eucjpms_bin |
eucjpms | 98
| |
Yes | 1
|

+----------------------+----------+-----+---------+----------+---------+

127 rows in set (0.00 sec)

这里compiled表示该collation所对应的character set是否被编译到此mysql数据库,通过此点就可以知道该mysql数据库是否支持某个字符集。sortlen表示要在内存中排序时,该字符集的字符要占用多少个字节。

你也可以利用like来进行筛选,如下:

mysql> show collation like 'latin1%';

+-------------------+---------+----+---------+----------+---------+

| Collation |
Charset | Id | Default | Compiled | Sortlen |

+-------------------+---------+----+---------+----------+---------+

| latin1_german1_ci | latin1 | 5
| |
Yes | 1
|

| latin1_swedish_ci | latin1 | 8
| Yes |
Yes | 1
|

| latin1_danish_ci |
latin1 | 15 | |
Yes | 1
|

| latin1_german2_ci | latin1 |
31 | |
Yes | 2
|

| latin1_bin |
latin1 | 47 | |
Yes | 1
|

| latin1_general_ci | latin1 |
48 | |
Yes | 1
|

| latin1_general_cs | latin1 |
49 | |
Yes | 1
|

| latin1_spanish_ci | latin1 |
94 | |
Yes | 1
|

+-------------------+---------+----+---------+----------+---------+

8 rows in set (0.00 sec)

大家可能已经发现collation的名字似乎有规律可循,其实的确也是这样的,并且它也有些特征,如下:

1、两个不同的字符集不能有相同的校验规则(字符集:校验规则 = 1:n);

2、每个字符集都有一个校验规则,就是对应的DEFAULT=YES的那个collation;

3、collation命名规则:字符集名_对应的语言名_ci/cs/bin,其中ci表示大小写不敏感性,cs表示大小写敏感性,bin表示二进制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: