Mysql中文乱码解决思路和过程(一)

2014-11-24 10:32:57 · 作者: · 浏览: 0

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
--