下载了一个项目源码,在自己电脑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服务。