mysql charset=utf8你真的弄明白意思了吗

 更新时间:2020年01月06日 09:37:53   作者:Huang supreme  
这篇文章主要介绍了mysql charset=utf8你真的弄明白意思了吗?文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1、先来查看一个建表语句

create table student(
  sid int primary key aotu_increment,
  sname varchar(20) not null,
  age int
)charset=utf8;

思考一个问题:

  • 当我们建表时,不指定charset=utf8的时候,此时插入中文,为什么会报错呢?
  • 当指定charset=utf8后,再次插入中文,为什么又可以插入中文,并且不乱码呢?

2、查看CMD黑窗口的字符集

打开CMD黑窗口–>鼠标放在窗口最上方–>点击鼠标右键–>属性–>点击选项

在这里插入图片描述

通过上图可以知道:CMD中输入文字使用的字符编码是GBK。同时你在保存文件的时候,经常会看到ANSI字符集,这个代表的是本地字符集,我们在中国,本地字符集使用的就都是GBK编码。

3、你注意这个问题了吗?

在这里插入图片描述

客户端client输入的字符,都是采用GBK编码的。mysql服务器存储的字符又是UTF8编码的。那么,我们对数据库、表进行增删改查,最后返回到客户端界面中,要想保证字符不乱码,肯定是经过了"编码转换过程的"。我要问的是,究竟是什么东西完成了这个编码的转换过程的?

4、你不熟悉的几个mysql操作命令

-- 查看数据库支持的所有的字符集(这句命令自己下去操作)。
mysql> show character set;
-- 查看系统当前状态,里面可以看到部分字符集设置。
mysql> status;
-- 查看系统字符集设置,包括所有的字符集设置
mysql> show variables like '%char%';

操作结果如下:

在这里插入图片描述

通过上图我们可以看到有一个叫做"connection"的东西,中文名叫做"连接器"。"连接器"就是用来进行"编码转换过程"的。

1)连接器的特性

① “连接器的作用”:

连接客户端与服务端,进行字符集的转换。连接器有这种自动转换的功能。

② “连接器的工作流程”:
Ⅰ首先,客户端的字符先发给连接器,连接器选择一种编码将其转换(转换之后的编码, 与连接器的编码格式一致),进行临时存储。
Ⅱ 接着,连接器再次转换成与服务器一致的编码,并最终存储在服务器中。
Ⅲ 然后,服务器返回的结果,再次先通过连接器,连接器仍然是选择一种编码将其转换(转换之后的编码, 与连接器的编码格式一致),进行临时存储。
Ⅳ 最后,连接器再将结果转化为与客户端一致的字符集,就可以在客户端正常显示了。

2)图示说明连接器connection的作用

图一:

在这里插入图片描述

图一说明如下:

在这里插入图片描述

图二:

在这里插入图片描述

图二说明如下:

在这里插入图片描述

5、对上述两个图的实战演示

1)首先,了解如下几个代码。

-- 1)设置客户端的字符集。
set character_set_client=gbk;
-- 2)设置连接器的字符集。
set character_set_connection=utf8;
-- 3)设置返回结果的字符集。
set character_set_results=gbk;

2)代码演示过程,详细地写在如下链接中的sql文件中,可以自行下载,查看。

http://note.youdao.com/noteshare?id=3fe60a490637d1a51ac78bf4a9e7e4d0&sub=511D73BDDEA34D9BAC565249035D74A8

6、产生乱码的两个原因

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

1)仔细查看如下图片

在这里插入图片描述

根据上图可以知道(好好理解下面的文字说明):

在这里插入图片描述

图二:

在这里插入图片描述

2)set names gbk的含义

-- 当客户端、连接器、返回值的字符集相同,并且都是gbk的时候,我们可以采取如下的简写方式:
 set names gbk;
 -- 上述sql语句其实包含了如下三层意思:
 set character_set_client=gbk;
 set character_set_connection=gbk;
 set character_set_results=gbk;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家

相关文章

  • Mysql如何优化查询速度

    Mysql如何优化查询速度

    这篇文章主要介绍了Mysql如何优化查询速度问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

    MySQL InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

    mysql的ibdata文件被误删、被恶意修改,没有从库和备份数据的情况下的数据恢复,不能保证数据库所有表数据的100%恢复,目的是尽可能多的恢复,下面是具体的操作方法
    2025-03-03
  • Oracle与MySQL的区别详解

    Oracle与MySQL的区别详解

    MySQL和Oracle Database都是一个关系型数据库管理系统,本文主要介绍了MySQL和Oracle Database的区别及优缺点是什么,感兴趣的小伙伴欢迎阅读
    2023-04-04
  • 获取MySQL的表中每个userid最后一条记录的方法

    获取MySQL的表中每个userid最后一条记录的方法

    这篇文章主要介绍了获取MySQL的表中每个userid最后一条记录的方法,并且针对userid不唯一的情况,需要的朋友可以参考下
    2015-05-05
  • 配置hive元数据到Mysql中的全过程记录

    配置hive元数据到Mysql中的全过程记录

    这篇文章主要给的大家介绍了关于配置hive元数据到Mysql中的全过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • InnoDB中不同SQL语句设置锁的情况详解

    InnoDB中不同SQL语句设置锁的情况详解

    这篇文章主要介绍了InnoDB中不同SQL语句设置锁的情况详解,在Mysql中,锁定读、更新、删除操作通常会对SQL语句处理过程中扫描到的每条索引记录设置记录锁,需要的朋友可以参考下
    2024-01-01
  • 使用MySQL实现select into临时表的功能

    使用MySQL实现select into临时表的功能

    这篇文章主要介绍了使用MySQL实现select into临时表的功能,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • mysql 行转列和列转行实例详解

    mysql 行转列和列转行实例详解

    这篇文章主要介绍了mysql 行转列和列转行实例详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • Windows server 2008 r2下MySQL5.7.17 winx64安装版配置方法图文教程

    Windows server 2008 r2下MySQL5.7.17 winx64安装版配置方法图文教程

    这篇文章主要为大家详细介绍了Windows server 2008 r2下MySQL5.7.17 winx64安装版配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • mysql如何实现最大连接数

    mysql如何实现最大连接数

    云服务器同时最大连接数,也就是说可以有一千个用户,那么mysql如何实现最大连接数,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12

最新评论