Windows服服务务器器MySQL中中文文乱乱码码的的解解决决方方法法
这篇文章主要介绍了MySQL中文乱码的一些解决方案,本文同时分解了MySQL中文乱码的原因分析,需要的朋友可以
参考下
我们 己鼓捣mysql时,总免不了会遇到这个问题 :插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在
己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。
如果你也遇到了这个问题,咱先不谈原因,在PC 带的cmd中 (或者是mysql安装版安装后的Command Line客户端,
又或者是工作用的SecureCRT)试试效果。进入mysql环境,从头开始操作。假设你的客户端编码是utf-8或者utf8 (这
么说太不严谨了,怎么能假设呢,但是一般来说假如安装后没动过,cmd是utf-8编码,mysql安装后的Command Line
客户端没装不记得,CRT看看Session Options里面的编码设置,一般也会设置成utf8),执行一些语句 :
1. 设置置编码客客户端端、、连接接、、返返回回结果果的的字字符符集集,,先先设置置成成latin1
2. 然然后后执行行下下面面的的看看下下各各个个字字符符是是不不是是这样的的
如果你的c aracter_set_client、c aracter_set_connection、c aracter_set_results不是latin1,可以这 执行,把他们
单个分别设置成latin1,比如设c aracter_set_client,其他两个一 ,确保这三个均是latin1 (第一步的sql语句实际做
的就是这件事),
3. 单独独创建建一一个个数数据据库db_latin1,,当当然然是是很很简单的的了了,,测试嘛嘛,,创建建时就就设置置数数据据库的的编码的的为latin1
4. 在在它它下下面面创建建一一张表表tab_latin1,,字字符符集集也也设置置成成latin1,,这里里不不设置置字字符符也也行行,,数数据据库级已已经设置置了了,,这里里只只
创建建一一个个name字字段段
5. 插插入入一一些些中中文文字字符符到到表表中中,,先先说明明,,本本机机的的cmd编码是是utf-8,,查看看方方法法是是右右键属属性性->选项,,看看下下当当前前代代码页即即可可
知知道道
6. 查看看下下结果果
看吧,正常显示中文了~~~
OK,都到这儿了你就不想知道“为什么我那 设置就是不行”么,当然得往下看看是不。上图 :
我们知道mysql是客户端-服务器软件,每次操作都是客户端向服务端发送请求,然后可能会返回一些结果,这之间插
入的字符经过了一系列转换。首先供我们编辑的客户端本身就有一种编码,比如PC端的命令行默认是utf-8,PC 带n
otepad新建文本文件默认是ANSI,常用的文本编辑器如notepad++,我们可能会设置默认编码为utf8,就是说在编辑
器上编辑,你所看到的本身就是一种编码了。
1. 在客户端编辑后,首先转化为client对应的字符集,即上面打印出的c aracter_set_client变量指示的字符集 ;
2. 向数据库服务发送请求,发送过程中,转化为connection对应连接字符集,即c aracter_set_connection变量对应字
符集 ;
3. 存储到数据库中,转化为数据库存储的字符集,可能是server级别 (c aracter_set_server)、database级别 (c ar
acter_set_database)或者表级别和列级别 (这里还要细说下) ;
4. 数据库收到请求,执行查询得到结果,再次转化为results对应字符集,即c aracter_set_results变量所指,该结果
返回到客户端上 ;
5. 结果来了,是按照results字符集编码的,那我们让这个结果显示的客户端工具它支持什么 的编码也很重要,这决
定了它如何去解码结果。假如这个结果是utf8编码,返回给某客户端了,但这个客户端只有ANSI编码,那当然不能显
示正常,比如它返回到SecureCRT,结果显示不正常,但是CRT支持多种编码,我们手动将它调成utf8编码,那它就
又显示正常了,所以严格来说这一步算不上,只是跟客户端条件有关,毕竟当我们知道后将客户端调整成正常的编码
或者本来就支持转换results的编码后,这一步就不存在了。
在上面的第3步中,从连接字