当前位置:网站首页>Mysql客户端到服务端字符集的转换
Mysql客户端到服务端字符集的转换
2022-07-23 11:59:00 【Java面试365】
Mysql客户端到服务端字符集的转换
Mysql客户端和服务端之间的通信请求本质上是一个字符串,当然这个字符串会通过某种字符集编码转换为二进制数据,那是不是客户端和服务端之间的通信就只有一个字符集编码呢?如下所示

服务端编码
显然并不是这样,在服务端处理请求的过程中就涉及到三个字符集的转换,这三个转换分别对应三个系统变量如下所示
**
character_set_client**:服务器解码客户端请求的字符串所用字符集。**
character_set_connection**:服务器处理请求时会将character_set_client字符集转为character_set_connection字符集。**
character_set_results**:服务端向客户端返回时所用的字符集编码。
查看字符集如下所示
### 为了篇幅,直接使用模糊查询查看,字符集展示如下
mysql> show variables like '%character%';
+--------------------------+-----------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-5.7.26/share/charsets/ |
+--------------------------+-----------------------------------------+
8 rows in set (0.00 sec)
客户端编码
并且客户端如果发送请求就会将字符串按照操作系统的字符集编码为二进制数据,在客户端接收到服务端请求后也会根据操作系统的字符集将二进制数据解码为字符串,那么操作系统字符集怎么查看呢?
### 在/etc/locale.conf文件 centos8默认字符集配置如下
[[email protected] ~]# cat /etc/locale.conf
LANG=en_US.UTF-8
转换过程
转换过程涉及到几种字符集的转换,步骤如下
客户端采用系统字符集默认是UTF8将操作数据库语句进行编码,变为二进制数据,这里仅限于采用
mysql -uroot -pxxx接入的客户端,不包括市面流行的图形化界面客户端如Navicat,DBeaver等。服务端接收到客户端发送的二进制数据后,通过字符集
character_set_client字符集解码,变为字符串。将解码后的字符串又采用
character_set_connection字符集编码,变为二进制数据用于操作数据库,如果数据库列的字符集和character_set_connection字符集不同,那么需要进行字符集转换,最终得到结果数据。在返回给客户端之前还需要将结果根据
character_set_results进行编码。客户端接收到返回二进制数据,同样需要根据系统字符集进行解码,最终显示在客户端。
将上述文件转换为流程图,如下所示

字符集修改
服务端相关字符集系统变量是三个,如果想修改为了保证不会乱码一般需要同步修改,显然这样做很麻烦,那么我们可以采用如下两种方式,这两种方法的效果都是一次性将涉及到服务端编码的三个系统变量统一更新。
set方式
采用组合命令set names 字符集名称,命令演示如下
mysql> show variables like '%character%';
+--------------------------+-----------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-5.7.26/share/charsets/ |
+--------------------------+-----------------------------------------+
8 rows in set (0.00 sec)
mysql> set names gbk;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%character%';
+--------------------------+-----------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-5.7.26/share/charsets/ |
+--------------------------+-----------------------------------------+
8 rows in set (0.01 sec)
修改配置文件
可以在默认配置文件/etc/my.cnf,添加客户端启动系统配置参数
[client]
default-character-set=gbk
重连客户端就能得修改后的字符集,效果和set类似。
边栏推荐
- W3C 推出去中心化标识符作为 Web 标准
- “1+1>10”:无代码/低代码与RPA技术的潜在结合
- Design idea of initializing page input parameters
- Of the 24 almost inevitable JVM interview questions, I only know 7. How many can you answer?
- 【无标题】
- Mysql—主从复制
- Without Huawei, Qualcomm will raise prices at will, and domestic mobile phones that lack core technology can only be slaughtered
- 剑指 Offer II 115. 重建序列 : 拓扑排序构造题
- 【深入浅出向】从自信息到熵、从相对熵到交叉熵,nn.CrossEntropyLoss, 交叉熵损失函数与softmax,多标签分类
- FPGA-HLS-乘法器(流水线对比普通仿真)
猜你喜欢

中年危机,35岁被退休,打工人拿什么来抗衡资本家?

Software testing weekly (No. 81): what can resist negativity is not positivity, but concentration; What can resist anxiety is not comfort, but concrete.

The difference between deadlock, hunger and dead cycle

2022 the most NB JVM foundation to tuning notes, thoroughly understand Alibaba P6 small case

SharedPreferences data storage

数字化转型时代的企业数据新基建 | 爱分析报告
![[paper study] source mixing and separation robot audio steganography](/img/e1/55e8f6a3e754d728fe6b685a08fdbc.png)
[paper study] source mixing and separation robot audio steganography

2022蓝帽杯初赛wp

sqlnet. Ora-12154 and ora-01017 connection exceptions caused by incorrect ora file settings

Vinka introduces high anti-interference vk36n series touch IC: vk36n1d, vk36n2p, vk36n3b, vk36n4i, easy to use
随机推荐
虚拟主播、偶像代言产品出问题谁负责?律师解析
MySQL 灵魂 16 问,你能撑到第几问?
【深入浅出向】从自信息到熵、从相对熵到交叉熵,nn.CrossEntropyLoss, 交叉熵损失函数与softmax,多标签分类
Of the 24 almost inevitable JVM interview questions, I only know 7. How many can you answer?
Bean Validation规范篇----03
js过滤/替换敏感字符
SOC的第一个Hello_World实验
ECS remote monitoring
Details of task switching
剑指 Offer II 115. 重建序列 : 拓扑排序构造题
[cloud native] continuous integration and deployment (Jenkins)
Redis sentinel mode
Alamofire 框架封装与使用
CONDA set up proxy
Reproduce various counter attack methods
GO语言学习——复习包、接口、文件操作
1060 Are They Equal
后缀表达式(暑假每日一题 4)
24 道几乎必问的 JVM 面试题,我只会 7 道,你能答出几道?
Vim到底可以配置得多漂亮?