mysql中文乱码问题解决方法
//见表语句
CREATE TABLE gjp_ledger(
lid INT PRIMARY KEY AUTO_INCREMENT, -- 账务ID
parent VARCHAR(100), -- 所属父分类
money DOUBLE, -- 金额
sid INT, -- 分类ID
account VARCHAR(100), -- 账户
createtime DATE, -- 创建时
ldesc VARCHAR(1000) -- 描述
);
//向表中插入数据
insert into gjp_ledger(lid,parent,money,sid,account,createtime,ldesc)
values (1,'支出',247,2,'交通银行','2016-03-02','家庭聚餐'),
(2,'收入',12345,5,'现金','2016-03-15','开工资了'),
(3,'支出',1998,1,'现金','2016-04-02','买衣服'),
(4,'支出',325,2,'现金','2016-06-18','朋友聚餐'),
出现乱码的情况如下:
二、排查错误原因及修改
为了弄清楚到底是数据库的链接工具乱码还是数据库本身乱码,我们最好采用在dos窗口下执行sql命令,这样如果乱码的化代表使数据库本身乱码。
排查错误原因:
1.在安装mysql数据库的时候是否将字符编码集设置为“utf8”或者“GBK”编码,默认为是“Latin”文,是不能显示中文的。
2.查看数据库的编码,如下:
从上面可以看出,mysql数据库的客户端、连接、数据库、结果集和服务器等都是latinl,这时我们关闭mysql服务器,找到mysql安装路径下的my.ini文件,将下面两个编码集改为utf8,如下:
default-character-set=latin1 改为default-character-set=utf8
character-set-server=latin1 改为character-set-server=utf8
保存后,重启服务器,重新打开dos窗口,执行sql命令:show variables like 'character%'; 如下:
如果上图中的 character_set_database 的 value 仍为 latinl ,则需要执行命令 SET character_set_client = utf8; ,再重启mysql服务器和dos窗口查看,即与上图中的结果一致。
三、出现新问题并解决
上述操作之后,我们在查询数据库中的数据,发现表中仍存在乱码现象,这时候我们需要重新创建表和插入数据,但是在插入数据是又出现了新的错误如下:
错误:1366 - Incorrect string value: '\xE4\xB8\xAD\xE6\x96\x87' for column 'cName' at row 1
这是因为mysql 的默认编码位latinl,所以在创建表时,带有中文的字段要在数据类型后添加“ CHARSET utf8 ”
DROP TABLE gjp_ledger;
CREATE TABLE gjp_ledger(
lid INT PRIMARY KEY AUTO_INCREMENT, -- 账务ID
parent VARCHAR(100) CHARSET utf8 , -- 所属父分类
money DOUBLE , -- 金额
sid INT, -- 分类ID
account VARCHAR(100) CHARSET utf8 , -- 账户
createtime DATE, -- 创建时间
ldesc VARCHAR(1000) CHARSET utf8 -- 描述
);
再插入数据即可成功,