写点什么

字符集与校对集概述

用户头像
在即
关注
发布于: 2021 年 03 月 20 日
字符集与校对集概述

字符(character):计算机中保存的各种文字和符号。

如:各种国家的文字、标点符号、图形符号、数字等。

字符编码(character encoding):将用户输入的字符,按照一定的规则转换为二进制后保存的过程。

字符集(character set,charset):字符的编码规则组合。

Charset:字符集名称

Description:描述信息

Default collation:默认校对集

Maxlen:单字符的最大长度

由于历史原因,MySQL 中的 utf8 编码与标准的 UTF-8(RFC 3629)存在一些差别。


标准的 UTF-8 规定一个字符最多使用 4 个字节,

而 MySQL 中的 utf8 编码一个字符最多使用 3 个字节。


这导致 UTF-8 中的一些特殊字符(如 emoji 符号)无法在 MySQL 的 utf8 编码中使用。

校对集:为不同字符集指定比较和排序规则。


例如:latin1 字符集默认的校对集为“latin1swedishci”。

↑ ↑ ↑

字符集 国家名或 genera 规则

ci:不区分大小写

cs:区分大小写

bin:以二进制方式比较

Collation:校对集名称

Charset:对应的字符集

Id:校对集 ID

Default:是否为对应字符集的默认校对集

Compiled:是否已编译

Sortlen:排序的内存需求量

mysql> SHOW VARIABLES LIKE 'character%';

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

| Variable_name | Value |

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

| charactersetclient | gbk |

| charactersetconnection | gbk |

| charactersetdatabase | latin1 |

| charactersetfilesystem | binary |

| charactersetresults | gbk |

| charactersetserver | latin1 |

| charactersetsystem | utf8 |

| charactersetsdir | C:\mysql5.7\share\charsets\ |

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

8 rows in set, 1 warning (0.01 sec)

charactersetserver:新创建的数据库默认使用的字符集。


数据库的字符集 决定了 数据表的默认字符集,

数据表的字符集 决定了 字段的默认字符集。

charactersetclient:客户端字符集

charactersetconnection:连接层字符集

charactersetresults:查询结果字符集

charactersetclient:客户端字符集

charactersetconnection:连接层字符集

charactersetresults:查询结果字符集

一次更改 3 个变量的值:

set names 字符集;

字符集与校对集的设置

使用 set 或 set names 修改字符集只对当前会话有效,不影响其他会话,且会话结束后,下次会话仍然使用默认值。


因此下次会话仍然需要重新执行命令。

若字段使用 utf8 字符集,而客户端使用 gbk 字符集,MySQL 会自动进行编码转换。


由于 utf8 和 gbk 本质上是不同的字符集,虽然大部分常见的字符可以转换成功,但若遇到其中一个字符集中没有的特殊字符,则可能会出现乱码。

在创建数据库时设定字符集和校对集:

[DEFAULT] CHARACTER SET [=] charset_name

[DEFAULT] COLLATE [=] collation_name

为数据表设置字符集示例

CREATE TABLE my_charset (

username VARCHAR(20)

) CHARACTER SET utf8 COLLATE utf8_bin;

简写形式

CREATE TABLE my_charset (

username VARCHAR(20)

) CHARSET utf8 COLLATE utf8_bin;

字段的字符集与校对集在字段属性中设定:

[CHARACTER SET charsetname] [COLLATE collationname]

若没有为字段设定字符集与校对集,则会自动使用数据表的字符集与校对集。

为字段设置字符集示例

CREATE TABLE my_charset (

username VARCHAR(20) CHARACTER SET utf8 COLLATE utf8_bin

);

在 mydb 数据库中创建一张用户表(user)。

在表中添加以下字段,选择合适的数据类型。

用户名:可以使用中文,不允许重复,长度 2~20 个字符。

手机号码:长度为 11 个字符。

性别:有男、女、保密 3 种选择。

注册时间:注册时的日期和时间。

会员等级:表示会员等级的数字,最高为 100。

回见

发布于: 2021 年 03 月 20 日阅读数: 9
用户头像

在即

关注

还未添加个人签名 2021.02.27 加入

还未添加个人简介

评论

发布
暂无评论
字符集与校对集概述