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