最近在给管理系统添加个的操作日志功能将日志记录到mysql里,然而获取的汉字显示为???。
于是网上搜索解决办法,‘彻底解决mysql中文乱码’、‘完美解决mysql中文乱码问题’、‘mysql乱码解决’...,相关的资料多如牛毛,基本叙述就是:
1、查看查看数据库与服务端的字符集设置
show variables like "%colla%";show varables like "%char%";
2、修改global范围字符编码
set global character_set_database=gbk;
set global character_set_server=gbk;
show variables like '%char%';
3、linux环境下my.cnf文件、win环境下my.ini文件修改,然后重启mysql。
default-character-set=gbk、character_set_server=gbk
但是,以上方法都无济于事。
一、首先,页面编码和数据编码格式要一致,页面编码gbk,那么数据编码也应该gbk,怎么设置数据编码,我们需要先了解数据存储编码部分。参见:MySQL的字符编码体系(一)——数据存储编码。
默认数据库编码的设置分为四个层次:server级、数据库级、数据表级和列级。越里层优先级越高,所以应该检查修改每个层级的编码。
二、检查各层次数据编码
1、查看库字符集
show create database 库名;
2、查看表编码
show table status from 库名 like '表名';
3、查看某库的所有表编码
show full columns from 表名;
三、修改编码
1、修改库的数据编码
ALTER DATABASE 库名 DEFAULT CHARACTER SET 字符集;
2、修改mod_log表的数据编码
ALTER TABLE mod_log DEFAULT CHARACTER SET gbk;
3、修改user_name列的数据编码
ALTER TABLE mod_log CHANGE COLUMN user_name user_name varchar(15) CHARACTER SET gbk COLLATE gbk_chinese_ci NOT NULL;
4、修改linux环境下my.cnf文件、win环境下my.ini文件修改,重启数据库。显示正常:
针对乱码的一些建议
1、建议在安装Mysql下一步的时候,设置合理的默认字符集。
2、创建库时指定字符集。
3、在不了解的情况下,切勿照搬网上的文章修改字符编码,可能会导致更严重的乱码。
这次踩坑归根结底是自己没有系统深入学习。学东西是个不断积淀的过程,最好的方法不是快餐式的对付,而是要循序渐进的理解和实践,别无捷径。