呼,总算活过来了.在网上搜罗了很多资料.也有很多槽点不吐不快
我的解决方案
修改/etc/my.cnf文件, (ps: my.cnf文件在 windos下叫做my.ini 在linux下叫做my.cnf)
``修改如下:
在原本的[mysqld]下面插入一条:
character-set-server=utf8
ps:
1) 注意当前文件的写入权限问题,
2) 老版的mysql是在[mysqld]下插入: default-character-set=utf8
思路:
在一开始发现这个问题的时候,我首先做了一个简陋的确认清单,尽管一开始并不完善,但是后面想到什么加什么,一直到bug解决完毕
1) 检查前台传入参数是否乱码
检查html页面的编码格式
检查请求体编码格式
检查weblogic默认编码格式
2) 检查后台接受参数是否乱码
检查servlet编码格式
检查字符串中的编码格式
3) 数据库存储参数是否乱码
检查数据库编码格式
检查数据库表的编码格式
检查数据库表字段的编码格式
检查数据库服务的编码
所以
1) 查看页面的编码格式;
eg: 我打开了 浏览器的控制台,在 Elements下寻找是否有
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
这一行代码.
2)查看请求体之中的编码格式
我打开了 浏览器的控制台 network中查看请求体之中的编码格式;
eg:
3)检查服务器的编码格式
由于我使用的是weblogic, 所以在 ${basePath}user_projects///servers/AdminServer/logs/
找到了最近的启动日志AdminServer.log00013,打开搜索 file.encoding
4) 检查servlet的编码格式
在 controller中插入以下代码
request.setCharacterEncoding("utf-8");
然后将值打印输出,输出在控制台,或日志文件等.
5) 检查接收到的参数是否是utf-8
if (value.equals(new String(value.getBytes("utf-8"), "utf-8")))
{
tmp = "yes";
} else {
tmp = "no";
}
将tmp变量输出就可以了.
6) 检查数据库编码格式
-- 查看数据库的编码
show create database <数据库名>;
7) 检查数据库表的编码格式
-- 查看数据库表的编码
SHOW CREATE TABLE <表名>;
8) 检查数据库表字段的编码格式
-- 查看数据库表中字段的编码
SHOW FULL COLUMNS FROM <表名>;
9)检查数据库服务的编码
show variables like 'character%';
ps:
1) 如果不确定数据库连接工具的编码格式 怕数据库连接工具的编码格式导致查询乱码可以使用 cmd方式连接
我就是根据以上的检查步骤最终定位出问题,当然以上的步骤也只能定位问题.
补充:
如果你发现你出现了 ??? 乱码问题 然后在第九步检查服务编码的时候发现服务编码 latinl,那么不要犹豫,去修改你的my.cnf或者是my.ini 文件然后重启罢