项目中mysql及jsp编码问题解决记录

    在学习Mybatis时,首先想用最原始的jdbc实现一遍,一个简单的web项目,servlet作为控制层,获取数据库数据后跳转到jsp页面。连接都正常,获取到界面上的中文为乱码,折腾了很久,记录下解决过程。

    1、以为是浏览器页面编码问题,使用的是chrome,下载了一个charset插件,可以改变页面编码,改为utf-8后仍是乱码,换了一种乱码貌似。。。

    2、后台断点调试,突然发现DAO层获取的数据就是乱码,考虑可能是连接没有指定编码,参考网上建议,将url修改为

jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=UTF-8,不过没有起作用

后面的参数有以下用途:

①存数据时: 

数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。

         ②取数据时:

在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。

3、,然后查看Mysql数据库(mysql 5.5.55),直接使用的navicat premium 12,查看创建的数据表一切正常,能够正常插入中文,然后使用cmd命令行查看数据表,发现竟然是乱码!!!然后百度,试了各种方法,修改mysql my.ini配置,将编码全改为utf8,原本为latin。

[client]

port=3306

default-character-set=utf8       

[mysql]

default-character-set=utf8

[mysqld]

character-set-server=utf8

然后在命令行执行如下命令


执行结果均为utf-8,然后开开心心地创建数据库,数据表,并没有指定字符集之类的,采用的均是默认utf-8,后来没有解决的时候我猜测是不是数据库和数据表的编码不对,重新创建库和表并添加了字符集,和默认创建的其实是一样的。


然后插入中文数据的时候报错,英文是正确的

然后各种找方法,快放弃的时候set names gbk;可以看到字符集已经被修改,此时从命令行mysql已经可以正常插入中文了


4、然后用navicat查看时,注意要设置连接属性中的高级编码设置为自动就可以正常查看中文

5、接着从jsp页面上查看数据时仍是乱码,需要在控制层设置request.setCharacterEncoding("utf-8");

        在jsp页面设置<%@ page language="java" pageEncoding="utf-8"%>即可正常显示中文。


花费了很长时间一直解决不了,网上相同的答案很多,不过对我没有起到什么作用,故记录一下

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012108512/article/details/80331160
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭