mysql插入数据'???'乱码

,总算活过来了.在网上搜罗了很多资料.也有很多槽点不吐不快

我的解决方案

修改/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方式连接

我就是根据以上的检查步骤最终定位出问题,当然以上的步骤也只能定位问题.

扫描二维码关注公众号,回复: 10403182 查看本文章

补充:
如果你发现你出现了 ??? 乱码问题 然后在第九步检查服务编码的时候发现服务编码 latinl,那么不要犹豫,去修改你的my.cnf或者是my.ini 文件然后重启罢
在这里插入图片描述

发布了41 篇原创文章 · 获赞 227 · 访问量 8855

猜你喜欢

转载自blog.csdn.net/weixin_43843042/article/details/102609176