下载了一个项目源码,在自己电脑eclipse中导入了,并且跑起来了,测试下功能发现插入中文数据会显示乱码问题。

使用eclipse的debug模式调试发现页面传递的数据确实是中文,但是插入到数据库变成了乱码。解决方法如下:

mysql> use db_jxc;
Database changed
mysql> show create database db_jxc
    -> ;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| db_jxc   | CREATE DATABASE `db_jxc` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

我的数据库db_jxc确实是utf8编码。
查询表的编码

mysql> show create table t_customer;
+------------+---------------------------------------------------------
------------------------------------------------+
| Table      | Create Table
                                                |
+------------+---------------------------------------------------------
------------------------------------------------+
| t_customer | CREATE TABLE `t_customer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `address` varchar(300) DEFAULT NULL,
  `contact` varchar(50) DEFAULT NULL,
  `name` varchar(200) DEFAULT NULL,
  `number` varchar(50) DEFAULT NULL,
  `remarks` varchar(1000) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 |
+------------+---------------------------------------------------------
------------------------------------------------+
1 row in set (0.00 sec)

发现也是utf8编码
查询下刚插入的数据,发现存到数据库里是乱码,如下:

mysql> select * from t_customer;
+----+---------------------+---------+------------------+---------------+-----------+
| id | address             | contact | name             | number        | remarks   |
+----+---------------------+---------+------------------+---------------+-----------+
|  1 | 福州新弯曲5号       | 小李子  | 福州艾玛超市     | 2132-23213421 |           |
|  2 | 天津兴达大街888号   | 小张    | 天津王大连锁酒店 | 23432222311   | 优质客户  |
|  3 | 大凉山妥洛村        | 小爱    | 大凉山希望小学   | 233243211     | 照顾客户2 |
|  4 | 南通通州新金路888号 | 王二小  | 南通通州综艺集团 | 1832132321    |           |
|  7 | ????                | ???     | 503??            | 18679758769   |           |
+----+---------------------+---------+------------------+---------------+-----------+
5 rows in set (0.03 sec)

查询下数据库的编码:

mysql> show variables like 'char%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | gbk                                                     |
| character_set_connection | gbk                                                     |
| character_set_database   | utf8                                                    |
| character_set_filesystem | binary                                                  |
| character_set_results    | gbk                                                     |
| character_set_server     | latin1                                                  |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.6\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)

发现不统一了,修改成utf8

set character_set_client = utf8;
set character_set_connection = utf8;
set character_set_database = utf8;
set character_set_results = utf8;
set character_set_server = utf8;

设置之后,再次查询如下:

mysql> show variables like 'char%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | utf8                                                    |
| character_set_connection | utf8                                                    |
| character_set_database   | utf8                                                    |
| character_set_filesystem | binary                                                  |
| character_set_results    | utf8                                                    |
| character_set_server     | utf8                                                    |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.6\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.00 sec)

在控制台插入数据中文正常了,但是这种解决方式只是临时的,要永久生效还得修改配置文件。
改动mysql配置文件/etc/my.cnf。

[mysqld]
character-set-server=utf8 
[client]
default-character-set=utf8 
[mysql]
default-character-set=utf8

查看mysql的安装目录和数据存放目录

mysql> select @@basedir;
+------------------------------------------+
| @@basedir                                |
+------------------------------------------+
| C:\Program Files\MySQL\MySQL Server 5.6\ |
+------------------------------------------+
1 row in set (0.00 sec)
mysql> select @@datadir;
+-----------------------------------------------+
| @@datadir                                     |
+-----------------------------------------------+
| C:\Program Files\MySQL\MySQL Server 5.6\data\ |
+-----------------------------------------------+
1 row in set (0.00 sec)

拷贝my-default.ini,并修改成my.ini
重启mysql服务。