mysql编码问题——charset=utf8你真的弄明白了吗?(三)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: mysql编码问题——charset=utf8你真的弄明白了吗?(三)

6、产生乱码的两个原因

解码与实际编码,不一致导致的乱码,可修复。

在传输过程中,由于编码不一致,导致部分字节丢失,造成的乱码,不可修复。

1)编码和解码不一致导致的乱码

image.png


2)传输过程中,丢失字节导致的乱码。

image.png


7、对实际情况的分析(什么都不设置,系统默认是如何呢?)

1)MySQL系统参数如下


根据上图可以知道:

  我们使用图中的这个命令,可以查看系统所有的字符集的设置。从图中可以清楚的看到,客户端的字符集默认是gbk,连接器的字符集默认是gbk,返回值的字符集是gbk,mysql服务器的字符集默认是latin1。

 上述设置,是不是和图2(如下所示)中的情况,非常相似。唯一不同的就是系统默认mysql服务器的字符集是latin1,而图二中mysql服务器的字符集是utf8。

 “系统为什么将mysql服务器默认使用latin1字符集?你可以自行百度。”

 为什么要这么设置呢?因为latin1不支持中文,当我们插入中文的时候,当客户端发送过去的字符,通过连接器,最后发送给mysql服务器的时候,连接器发现mysql服务器采用的字符级是latin1,字符集由gbk转化为latin1,就相当于大鱼过小渔网一样,一定会掉肉,而对于字符集来说就会丢失字节。丢失字节后存入的值,肯定也就是错误的,不正确的。

 由于mysql的检测是很严格的,既然你存入的时候都会丢失字节,那么存入的值肯定也是错误的,因此,我索性就不让你插入。“这就是我们不设置mysql服务器字符集,想要插图中文,提示1366错误的原因。”"ERROR 1366 (HY000): Incorrect string value: ‘\xD5\xC5\xC8\xFD’ ““for column ‘sname’ at row 1”

当我们使用"charset=utf8"命令,将mysql服务器的字符集设置为utf8后,由于utf8是支持中文的,utf8是变长字符集,它能够支持全世界所有国家的语言。因此,当你输入一个以gbk格式编码的中文,在utf8中肯定是也有自己的一套编码格式,显示同样的文字(只不过此时是以utf8编码的)。

 “最后用一个不那么恰当的比喻,来说明字符集编码。”

 拿一本新华字典(汉语字典),再拿一本牛津字典(英语字典)。此时,我们要查找一个同一个词"中国”,在汉语字典中,"中国"采用的编码是zhongguo,但是在牛津字典中,“中国"采用的编码是china,你非要拿着zhongguo去牛津字典中查"中国”,你觉得你得到的结果是正常显示,还是乱码呢?

image.png


2)set names gbk的含义

当客户端、连接器、返回值的字符集相同,并且都是gbk的时候,我们可以采取如下的简写方式:
set names gbk;
这就话其实包含了三层意思:
set character_set_client=gbk;
set character_set_connection=gbk;
set character_set_results=gbk;
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
存储 关系型数据库 MySQL
MySQL库的操作『增删改查 ‖ 编码问题 ‖ 备份与恢复』
MySQL库的操作『增删改查 ‖ 编码问题 ‖ 备份与恢复』
88 0
|
7月前
|
SQL 关系型数据库 MySQL
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
【MySQL】— —熟练掌握用SQL语句实现数据库和基本表的创建。熟练掌握MySQL的安装、客户端登录方法;熟练掌握MySQL的编码、数据类型等基础知识;掌握实体完整性的定义和维护方法、掌握参照完整性
|
7月前
|
存储 关系型数据库 MySQL
Mysql中utf8和utf8mb4区别
Mysql中utf8和utf8mb4区别
105 0
|
1月前
|
SQL 关系型数据库 MySQL
|
6月前
|
存储 自然语言处理 关系型数据库
|
6月前
|
存储 自然语言处理 搜索推荐
mysql中utf8、utf8mb4和utf8mb4_unicode_ci、utf8mb4_general_ci
mysql中utf8、utf8mb4和utf8mb4_unicode_ci、utf8mb4_general_ci
199 0
|
7月前
|
存储 关系型数据库 MySQL
从零开始学Mysql - 字符集和编码(下)
从零开始学Mysql - 字符集和编码(下)
143 0
|
7月前
|
存储 SQL 关系型数据库
从零开始学Mysql - 字符集和编码(上)
从零开始学Mysql - 字符集和编码(上)
169 0
|
7月前
|
存储 关系型数据库 MySQL
为什么不建议在MySQL中使用 utf8?
MySQL 字符编码集中有两套 UTF-8 编码实现:utf8 和 utf8mb4。 如果使用 utf8 的话,存储 emoji 符号和一些比较复杂的汉字、繁体字就会出错。
|
7月前
|
关系型数据库 MySQL Linux
【Linux 下 MySQL5.7 中文编码设置】
【Linux 下 MySQL5.7 中文编码设置】