mysql编码乱码问题及解决过程

  • 格式:doc
  • 大小:13.29 MB
  • 文档页数:5

下载文档原格式

  / 5
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MySQL编码问题

我们在dos窗口下使用命令操作数据库时,当向数据库中插入的数据或从数据库中查询的数据中包含中文时,就会出现乱码。出现乱码的原因是我们安装MySQL数据库服务器时已经指定了编码是utf8,而dos窗口的默认编码是gbk,也就是说客户端与服务器的编码不一样,这样就导致了乱码。

使用如下命令可以查看MySQL数据库编码:

●SHOW VARIABLES LIKE 'char%'

使用以上命令查看数据库编码,如图1-1所示:

查看数据库编码的语句

数据库编码

图1-1 查看数据库编码

如图1-1所示,数据库的编码是utf8,下面我们来介绍其中两项编码:

●character_set_client=utf8:客户端通知数据库服务器它的编码方式:

➢客户端即dos窗口发送的数据是gbk编码;

➢MySQL使用character_set_client指定的编码来解读客户端发送过来的数据,例如编码为UTF8;

➢结果:客户端发送过来的数据不是UTF8编码,那么就会出现乱码;

●character_set_results=utf8:数据库服务器向客户端发送的数据使用utf8编码:

➢MySQL会以character_set_results指定的编码方式将待发送的数据编码,然后发送给客户端,例如编码为UTF8;

➢客户端不使用UTF8来解读,而是使用gbk编码来解读;

➢结果:客户端不是使用UTF8来解读,那么就会出现乱码。

下面我们来试验一下,首先向数据库服务器端发送数据,如图1-2所示:

插入数据失败,原因是‘张三’乱码了

图1-2 插入数据乱码

图1-2中,在dos窗口下向数据库服务器发送数据,数据中包含中文“张三”,“张三”在dos窗口下是gbk编码,但是数据库服务器使用utf8进行解码,就出现乱码,因此插入失败。

解决办法:

●让客户端发送utf8的数据:在dos窗口下,它的编码就是gbk,很难修改,因此该方法是行

不通的;

●将character_set_client的值修改为gbk:通过命令:set character_set_client=gbk通知数据库服

务器客户端的编码是gbk,但是该方法有一个局限性,它只在当前dos窗口中有效,只要退

出访问mysql,那么再次登录时这个值需要重新设置。

下面,我们使用第二种解决办法来解决乱码,如图1-3所示:

没有修改编码之

前,插入数据失败

修改client编码为gbk

再次插入该条记录,插入成功

图1-3 解决插入数据中文乱码问题

图1-3中向student表中插入一条数据,下面我们来查询该表的记录,如图1-4所示:

插入的数据,name的值为

“张三”,但是查询出来的

“张三”是乱码

图1-4 查询student表

图1-4中,查询的数据出现乱码。

解决办法:

●让服务器发送gbk编码的数据:使用命令:set character_set_results=gbk将服务器发送数据的

编码设置为gbk,该方法有一个局限性,它也只对当前的dos窗口有效,关闭窗口或退出就

需要重新设置;

●让dos窗口使用utf8编码来解读数据:dos窗口的编码是gbk,很难改变,因此该方法是行

不通的。

下面,我们使用以上方法中的第二种方法来解决查询数据乱码问题,如图1-5所示:

没有设置编码之前,“张三”是乱码

设置数据库服务器返回数据的编码为gbk

编码设置之后,“张三”正常显示

图1-5 查询student表

以上解决插入数据中文乱码,和查询数据中文乱码的方法都只对当前dos窗口有效,当关闭窗口或退出,再次登录时又需要重新设置。这种方法不是长久之计,下面给大家介绍一个一劳永逸的方法,如下:在MySQL的安装目录下有一个my.ini文件,如图1-6所示:

该文件中包含的是数据

库的配置西信息

图1-6 my.ini文件

打开图1-6所示中的my.ini文件,找到如图1-7所示的代码:

图1-7 my.ini文件内容

将图1-7中,用红线标注的:default-character_set=utf8修改为default-character-set=gbk,如图1-8所示:

图1-8 修改client编码

图1-8中,修改了default-character-set的编码为gbk,有以下作用:

●将character_set_client的值修改为gbk:解决插入数据中文乱码问题;

●将character_set_results的值修改为gbk:解决查询数据中文乱码问题;

●将character_set_connection的值修改为gbk。

修改了my.ini文件之后需要重启MySQL服务,然后再次查询数据库编码如图1-9所示:

重启MySQL服务

查看数据库编码

编码都修改为gbk

图1-8 重新启动MySQL服务

现在我们再次查看student表,看张三是否还是乱码,如图1-9所示:

张三没有乱码,说明设置成功

图1-9 查看是否乱码

以上都是解决在dos窗口下操作数据库时的乱码问题,我们安装了SQLyog工具之后,在该工具中使用sql语句操作数据库时,它的编码就是utf8,因此不会出现乱码问题,我们以后操作数据库也不再使用dos窗口,而是使用SQLyog工具。