mysql charset=utf8你真的弄明白意思了吗
1、先来查看一个建表语句
createtablestudent( sidintprimarykeyaotu_increment, snamevarchar(20)notnull, ageint )charset=utf8;
思考一个问题:
- 当我们建表时,不指定charset=utf8的时候,此时插入中文,为什么会报错呢?
- 当指定charset=utf8后,再次插入中文,为什么又可以插入中文,并且不乱码呢?
2、查看CMD黑窗口的字符集
打开CMD黑窗口–>鼠标放在窗口最上方–>点击鼠标右键–>属性–>点击选项
通过上图可以知道:CMD中输入文字使用的字符编码是GBK。同时你在保存文件的时候,经常会看到ANSI字符集,这个代表的是本地字符集,我们在中国,本地字符集使用的就都是GBK编码。
3、你注意这个问题了吗?
--查看数据库支持的所有的字符集(这句命令自己下去操作)。 mysql>showcharacterset; --查看系统当前状态,里面可以看到部分字符集设置。 mysql>status; --查看系统字符集设置,包括所有的字符集设置 mysql>showvariableslike'%char%';
操作结果如下:
通过上图我们可以看到有一个叫做"connection"的东西,中文名叫做"连接器"。"连接器"就是用来进行"编码转换过程"的。
1)连接器的特性
①“连接器的作用”:
连接客户端与服务端,进行字符集的转换。连接器有这种自动转换的功能。
②“连接器的工作流程”:
Ⅰ首先,客户端的字符先发给连接器,连接器选择一种编码将其转换(转换之后的编码,与连接器的编码格式一致),进行临时存储。
Ⅱ接着,连接器再次转换成与服务器一致的编码,并最终存储在服务器中。
Ⅲ然后,服务器返回的结果,再次先通过连接器,连接器仍然是选择一种编码将其转换(转换之后的编码,与连接器的编码格式一致),进行临时存储。
Ⅳ最后,连接器再将结果转化为与客户端一致的字符集,就可以在客户端正常显示了。
2)图示说明连接器connection的作用
图一:
图一说明如下:
5、对上述两个图的实战演示
1)首先,了解如下几个代码。
--1)设置客户端的字符集。 setcharacter_set_client=gbk; --2)设置连接器的字符集。 setcharacter_set_connection=utf8; --3)设置返回结果的字符集。 setcharacter_set_results=gbk;
2)代码演示过程,详细地写在如下链接中的sql文件中,可以自行下载,查看。
http://note.youdao.com/noteshare?id=3fe60a490637d1a51ac78bf4a9e7e4d0&sub=511D73BDDEA34D9BAC565249035D74A8
6、产生乱码的两个原因
解码与实际编码,不一致导致的乱码,可修复。
在传输过程中,由于编码不一致,导致部分字节丢失,造成的乱码,不可修复。
1)编码和解码不一致导致的乱码
--当客户端、连接器、返回值的字符集相同,并且都是gbk的时候,我们可以采取如下的简写方式: setnamesgbk; --上述sql语句其实包含了如下三层意思: setcharacter_set_client=gbk; setcharacter_set_connection=gbk; setcharacter_set_results=gbk;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。