全国咨询/投诉热线:400-618-4000

JAVA培训之MySQL编码问题

更新时间:2016年10月18日17时43分 来源:传智播客JAVA培训学院 浏览次数:

我们在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所示:

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

图1-4 查询student表
图1-4中,查询的数据出现乱码。
解决办法:
  • 让服务器发送gbk编码的数据:使用命令:set character_set_results=gbk将服务器发送数据的编码设置为gbk,该方法有一个局限性,它也只对当前的dos窗口有效,关闭窗口或退出就需要重新设置;
  • 让dos窗口使用utf8编码来解读数据:dos窗口的编码是gbk,很难改变,因此该方法是行不通的。
下面,我们使用以上方法中的第二种方法来解决查询数据乱码问题,如图1-5所示:

图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所示:

图1-8 重新启动MySQL服务
现在我们再次查看student表,看张三是否还是乱码,如图1-9所示:

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


本文版权归传智播客java学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客java学院

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

uids

北京校区

    14天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    8天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    0天免费试学

    基础班入门课程限时免费

    申请试学名额

    12天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    10天免费试学

    基础班入门课程限时免费

    申请试学名额