关于从jsp页面提交数据到数据库出现乱码的问题

这是jsp页面

 String ShipName = new String(request.getParameter("ShipName").getBytes("ISO8859_1"),"UTF-8");
        String project = new String(request.getParameter("project").getBytes("ISO8859_1"),"UTF-8");
        int number = Integer.parseInt(request.getParameter("test"));
        String name = (String)session.getAttribute("username");
        try{

            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://192.168.3.228:3305/YuDetect";
            String username = "bigdaddy";
            String password = "senya@2018";
            Connection conn = DriverManager.getConnection(url,username,password);
            String isExit = "select * from TestResult where ShipName = '"+ShipName+"' and DetectItem = '"+project+"'";
            PreparedStatement pstmt = conn.prepareStatement(isExit);
            ResultSet rs = pstmt.executeQuery();
            if(rs.next()){
                out.print("该数据已存在,请不要重复添加!");
            }else{              
                String sql = "insert into TestResult(ShipName,DetectItem,Val_detect,Detector) values(?,?,?,?)";
                PreparedStatement ps = conn.prepareStatement(sql);
                ps.setString(1,ShipName);
                ps.setString(2,project);
                ps.setInt(3,number);
                ps.setString(4,name);
                int row = ps.executeUpdate();
                if(row > 0){
                    out.print("成功添加数据!");
                }
                ps.close();
                conn.close();
                }
        }catch(Exception e){
            out.print("数据添加失败!");
            e.printStackTrace();
        }

这是mysql数据库的字符集
图片说明
现在可以确定的是,传到jsp页面的数据里没有乱码,“ShipName”可以正常显示中文,我觉得关键的问题在于往数据库里添加的时候出了编码问题,但是我数据库的编码格式也是utf-8(UTF-8和UTF8mb4都试过)结果都是
图片说明
想问问还有没有什么解决方法

造成中文乱码的原因有:
1.如果你用的是SSM,那么你看web.xml里边是否配置了中文乱码处理


CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter

encoding
UTF-8



CharacterEncodingFilter
/*

2.还有可能表单提交时 ,以post方式提交 tomat也需要配置中文乱码
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
3. 还有就是 数据库的问题 在安装mysql数据库时可以选择字符集 为UTF-8 如果没有选择 也可能出现中文乱码问题

tomcat的service.xml加 URIEncoding="UTF-8" 如下所示

楼主,是ISO-8859-1吧

mysql数据库默认编码latin,所以你输入的UTF-8会乱码。你在数据库my.ini配置文件里面把编码改为UTF-8就行了

可以在Tomcat中的server.xml中配置UTF-8

1.数据库连接必须指定编码,即&characterEncoding=utf8
2.如果get方式提交,例如tomcat容器需要connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
3.jsp页面上指定好编码,没必要ISO8859_1转utf8,即response.setContentType("text/html; charset=UTF-8");
request.setCharacterEncoding("UTF-8");

在数据库的url后面添加参数characterEncoding=utf8,

把GBK改成UTF-8试试

直接在jsp中加编码的设置试试,(先不在连数据库的里面加编码设置)
类似
<%@ page contentType="text/html;charset=gb2312"%>

String ShipName = java.net.URLEncoder.encode("测试", "UTF-8");

你把所有的编码都统一改成utf-8就好了

从页面提交的方式,是以post方式提交?如果不是,有可能会出现乱码。出现乱码的原因:1、tomcat设置编码和页面以及项目编码不一致 2、数据库设置编码不一致

java里的编码格式是否和数据库的编码一致。你先确定是页面传后台出乱码还是数据存数据库出现了乱码。

走一下断点,在存到数据库里之前看看是否乱码,如果不乱码就是数据库设置问题,乱码就是前台传的问题,设置一下相应的

数据库的字段的字符集,应该直接是utf8而不是utf8mb4吧?

为什么我的在浏览器显示我的int row = ps.executeUpdate();错误警告求解