数据库中插入数据中文乱码,jsp页面中显示中文乱码,用的ssm框架,解决之道完成详细版

做浏览全部档案页面时,jsp页面显示从数据库取出的数据时,出现中文乱码,从页面插入数据到数据库中时,数据库中出现(??)乱码,纠结了六个小时之后(蠢萌的自己)也没解决
第二天下午,无意中解决了。
说一下所有出现中文乱码大致的解决过程:

(1)JSP 中字符集的设置:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
(2)HTML 中字符集的设置:
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
</head>

(3)Tomcat 处理 GET 请求的字符集设置:
根目录下server.xml配置文件中:

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           URIEncoding="UTF-8"/>

(4)Tomcat 处理 POST 请求的字符集设置:
web.xml配置字符过滤器中:
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>  
    

(5)配置 JDBC 连接数据库的字符集为 UTF-8:
jdbc:mysql://localhost:3307/Ssmtest?useUnicode=true&characterEncoding=UTF-8


现在说的就是最关键的了!!!我就是蠢蠢的在这卡了6个小时!
数据库的编码格式要设为utf-8,千万别不屑一顾、上货:


(6)最好在创建数据库连接,数据库,表,字段时,字符集都设为utf-8
(7)发现数据库中也乱码时,通过 Show variables like 'character%'; 

查询一下是不是这样:
character_set_client = utf8;
character_set_results = utf8;
character_set_connection = utf8;
character_set_database = utf8;
character_set_server = utf8;

如果不是的话,可以
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
SET character_set_database = utf8;
SET character_set_server = utf8;

但是会发现,设完之后,重启mysql,他会还原,那么就要去配置文件中永久更改,我找了很多博客,基本都不行,最后总结了一个解决了,如下:

前往mysql根目录下的my.ini文件里改成这样

[client]
port=3307 (自己的端口)
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld] 
character-set-server=utf8
init-connect='set names utf8'

这样即使重启了mysql,通过 Show variables like 'character%'; 查询后会发现都变成了utf-8了。

这样就完了吗?不,没有,我在找问题的前两个小时,就做到以上所有了,但还是没有解决,直到刚刚、、我是这样解决了的:

我一般用Navicat Premium 打开mysql数据库,我发现,用mysql命令提示符方式查看编码都是utf-8,但在这上面这三个不是
character_set_client
character_set_results
character_set_connection

所以一直很懵逼,不知道怎么办,解决问题之后,我在想会不会是因为mysql根目录下的charsets文件夹中没有utf-8字符集的xml文件,题外话不说了,如下:

在 Navicat Premium 中,右键单击你的连接,编辑连接,在高级里面看看编码是否为:65001(UTF-8) ;看到这个心都凉了,如果不是,改过来说不定就好了
所以事实上要这样----->如果上面的操作你也都做好了没毛病的话,惊喜来了,一步到位!!!看下面:

再次回到之前的操作,在 Navicat Premium 中,右键单击你的连接,编辑连接,在高级里面将编码改为 Current Windows Codepage 
你会发现,可以了,无论jsp页面还是数据库中,都能正常了,提醒一下,把之前已经乱码的数据删掉重新加一下数据就好了

总结一下:内心非常崩溃,突然感觉自己不适合做这一行了都,虽然我现在算个初级的小白、、、,找问题很累,找不到很难受,找出来之后内心喜悦感爆炸
以上就是我这次的操作了、、互相记录分享。
ps:大力感谢此博客:https://blog.csdn.net/zhangchen124/article/details/78432654,帮我找出了问题关键所在、、。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值