Mysql 中文乱码问题是常见的问题,解决也是不难的,本文将通过我在遇到问题时候,如何的查找和解决为导向,来呈现分析解决问题的思路和过程。
在JavaEE项目开发中,通常的中文乱码问题分为web前端,web后端,数据库乱码,如果想查看web端的中文乱码问题,请参照博文http://blog.csdn.net/songdeitao/article/details/17577823,一但排除了web端的中文乱码,也就说乱码问题是在数据库端发生的了。
问题产生:
首先在创建用户,如图1所示:

图1
在点击增加用户的时候,数据库中userName字段显示为乱码:
mysql> select * from t_user; +--------+----------+------+---------------------+-------+ | userId | userName | age | birthday | isVip | +--------+----------+------+---------------------+-------+ | 1 | | 0 | 2014-01-01 00:00:00 | 1 | +--------+----------+------+---------------------+-------+ 1 row in set (0.00 sec)
解决思路
在javaweb项目中,在解决乱码问题之前,首先要确保是在数据库这里发生乱码,如果确实在数据库这端发生乱码,请试着通过以下步骤查找原因:步骤一:查看数据库编码状态,如下所示:
mysql> status; -------------- mysql Ver 14.12 Distrib 5.0.22, for Win32 (ia32) Connection id: 3 Current database: steven Current user: root@localhost SSL: Not in use Using delimiter: ; Server version: 5.0.22-community-nt Protocol version: 10 Connection: localhost via TCP/IP Server characterset: latin1 Db characterset: latin1 Client characterset: latin1 Conn. characterset: latin1 TCP port: 3306 Uptime: 2 hours 10 min 15 sec Threads: 1 Questions: 121 Slow queries: 0 Opens: 2 Flush tables: 1 Open tab les: 0 Queries per second avg: 0.015 --------------
发现Server,Db,Client,Conn.的字符编码均为latin1,所以一定会出现中文乱码的情况。 解决方案一:(window下) 通过MySQL Server Instance Configuration Wizard重新设置编码方案,如图2所示:
图2 然后一直Next,然后到Please select the database usage 的时候选择第三项,如图3所示:
图3 接着一直Next,到Please select the default character set.的时候选择gbk,字符编码,如图4所示:
图4 这个时候一直Next,确认密码后,Next,然后就Execute执行,如图5所示:
图5 Finish后,退出数据库命令控制台然后再进去,查看数据库编码状态,如下所示:
mysql> use steven; Database changed mysql> status; -------------- mysql Ver 14.12 Distrib 5.0.22, for Win32 (ia32) Connection id: 2 Current database: steven Current user: root@localhost SSL: Not in use Using delimiter: ; Server version: 5.0.22-community-nt Protocol version: 10 Connection: localhost via TCP/IP Server characterset: gbk Db characterset: latin1 Client characterset: gbk Conn. characterset: gbk TCP port: 3306 Uptime: 1 min 20 sec Threads: 1 Questions: 12 Slow queries: 0 Opens: 0 Flush tables: 1 Open tabl es: 6 Queries per second avg: 0.150 --------------发现编码除了Db characterset外其他的都改为gbk了,这是方案一,依然可以实现这样的更改。
解决方案二:通过配置文件,找到Mysql安装的目录,找到根目录下my.ini文件,如图6所示:
图6 然后打开后,进行如下更改,如图7所示:
图7 将latin1更改gbk编码方式,然后将数据库服务重新启动,如下所示:
C:\Users\Administrator>net stop mysql The MySQL service is stopping. The MySQL service was stopped successfully. C:\Users\Administrator>net start mysql The MySQL service is starting. The MySQL service was started successfully.这个时候和方案一一样的效果,然而此时并没有解决问题。
mysql> use steven; Database changed mysql> status; -------------- mysql Ver 14.12 Distrib 5.0.22, for Win32 (ia32) Connection id: 2 Current database: steven Current user: root@localhost SSL: Not in use Using delimiter: ; Server version: 5.0.22-community-nt Protocol version: 10 Connection: localhost via TCP/IP Server characterset: gbk Db characterset: latin1 Client characterset: gbk Conn. characterset: gbk TCP port: 3306 Uptime: 1 min 20 sec Threads: 1 Questions: 12 Slow queries: 0 Opens: 0 Flush tables: 1 Open tabl es: 6 Queries per second avg: 0.150 --