首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mysql字符集(2)--mysql从入门到精通(三)

Mysql字符集(2)--mysql从入门到精通(三)

作者头像
keying
发布2022-07-26 11:50:05
发布2022-07-26 11:50:05
36000
代码可运行
举报
运行总次数:0
代码可运行

上篇我们介绍了mysql字符集的种类,主要windows用gbk,mac默认utf8,还有字符集的服务器级别,数据库级别,表级别,连行都有级别,每一行都可以有不同的字符集:

Mysql字符集(1)--mysql从入门到精通(二)

由于字符集和比较规则是有联系的,修改字符集后,比较规则会自动变换成相对应的,相反修改比较规则后,同理字符集也会变化。

代码语言:javascript
代码运行次数:0
运行
复制
mysql> SHOW VARIABLES LIKE 'character_set_server';
+----------------------+--------+
| Variable_name        | Value  |
+----------------------+--------+
| character_set_server | latin1 |
+----------------------+--------+
1 row in set (0.03 sec)

mysql> set character_set_server = 'utf8mb4';
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW VARIABLES LIKE 'character_set_server';
+----------------------+---------+
| Variable_name        | Value   |
+----------------------+---------+
| character_set_server | utf8mb4 |
+----------------------+---------+
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'collation_server';
+------------------+--------------------+
| Variable_name    | Value              |
+------------------+--------------------+
| collation_server | utf8mb4_general_ci |
+------------------+--------------------+
1 row in set (0.00 sec)

从上面可以看到,我们服务器的字符集先是latin1,也就是ISO 8859-1字符集,用set修改完之后,再次查看显示的是utf8mb4字符集,并且比较规则也已跟着修改。

举个例子:我们给一个gbk字符集的字段加两个汉字"两个",其中“两”在gbk字符集代表4个字节,如果当前行是utf8mb4字符集,则会占用6个字节。

乱码怎么来的:就是不同的字符集相互转换,导致编码报错,出现乱码情况。

字符集转换的概念:如果接受一个字节串,先用utf8进行解码成为字符串,然后在用gbk进行编码成为字节串,在按gbk进行展示,我们把这个叫做字符集的转换。

Mysql客户端服务端怎么字符集怎么转换的呢?

我们知道客户端发往服务端本质上就是一个字符串,而服务端返回客户端也是一个字符串,而在这当中处理过很多次字符集的转换,并不是一种字符集一路畅通的,这一过程会有三个重要的系统变量:

  1. 1、character_set_client:服务器解码请求时使用的字符集。
  2. 2、character_set_connection:服务器处理请求会把请求的的字符串从character_Set_client转换成character_Set_connection。
  3. 3、character_Set_Result:服务器向客户端返回的字符集。
代码语言:javascript
代码运行次数:0
运行
复制
mysql> SHOW VARIABLES LIKE 'character_set_client';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| character_set_client | utf8  |
+----------------------+-------+
1 row in set (0.01 sec)

mysql>  SHOW VARIABLES LIKE 'character_set_results';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| character_set_results | utf8  |
+-----------------------+-------+
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'character_set_results';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| character_set_results | utf8  |
+-----------------------+-------+
1 row in set (0.00 sec)

从结果可以看到,客户端发的字符串请求字符集是utf8,处理和返回给客户端的也是utf8,下篇文章重点详细介绍如何转换。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端从入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mysql客户端服务端怎么字符集怎么转换的呢?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档