解决mysql中文乱码的方法

向mysql数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','男','1995-10-08',6000); 出现乱码,数据库里数据显示如下:

解决mysql中文乱码的方法

可以使用语句 show variables like 'character%'; 来查看当前数据库的相关编码集,如下:

解决mysql中文乱码的方法

从上图中可以看到 MySQL 有六处使用了字符集,分别为:client 、connection、database、results、server 、system。其中与服务器端相关:database、server、system(永远无法修改,就是utf-8);与客户端相关:connection、client、results 。
 
client 为客户端使用的字符集。
connection 为连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型则按照服务器端默认的字符集设置。
database 为数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
results 为数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
server 为服务器安装时指定的默认字符集设定。
system
为数据库系统使用的字符集设定。

分析查询的数据库编码集结果,知道客户端设置均为utf8编码,没有问题。
jsp页面头信息为:<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>,也为utf8 编码,无误。
因此问题出在数据库服务器设置端。

到mysql安装路径(5.5版本)查看my.ini文件配置,如下:
[client]
port=3306
[mysql]
default-character-set=utf8
......

[mysqld]

character-set-server=utf8
各项设置貌似也没问题。

经尝试,在 [mysqld]下增加一行

collation-server=utf8_general_ci

重启mysql:
net stop ysql

net start mysql
登录数据库,重新查询:show variables like 'character%';,结果如下:

解决mysql中文乱码的方法

各项编码集设置正常。
重新插入带中文的数据记录,中文能正常显示,问题解决。