mysql utf-8的作用,mysql charset=utf8你真的弄明白意思了吗

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

思考一个问题:

当我们建表时,不指定charset=utf8的时候,此时插入中文,为什么会报错呢?

当指定charset=utf8后,再次插入中文,为什么又可以插入中文,并且不乱码呢?

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

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

16410Q513-0.png

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

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

16410U255-1.png

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

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

操作结果如下:

16410U028-2.png

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

1)连接器的特性

① “连接器的作用”:

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

② “连接器的工作流程”:

Ⅰ首先,客户端的字符先发给连接器,连接器选择一种编码将其转换(转换之后的编码, 与连接器的编码格式一致),进行临时存储。

Ⅱ 接着,连接器再次转换成与服务器一致的编码,并最终存储在服务器中。

Ⅲ 然后,服务器返回的结果,再次先通过连接器,连接器仍然是选择一种编码将其转换(转换之后的编码, 与连接器的编码格式一致),进行临时存储。

Ⅳ 最后,连接器再将结果转化为与客户端一致的字符集,就可以在客户端正常显示了。

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

图一:

16410T540-3.png

图一说明如下:

16410VC6-4.png

图二:

16410U332-5.png

图二说明如下:

16410S502-6.png

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

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

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

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

6、产生乱码的两个原因

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

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

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

16410R5L-7.png

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

16410Q419-8.png

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

1)仔细查看如下图片

16410VE0-9.png

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

16410U223-10.png

图二:

16410SB0-11.png

2)set names gbk的含义

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

原文链接:https://blog.csdn.net/weixin_41261833/article/details/103488680

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值