Java提交到MySQL数据库出现乱码的原因

时间:2023-02-07 06:40:09

    一、场景说明:

             从前端提交数据到服务器端,服务器端处理后,提交数据到MySQL数据库。当前端提交的数据中包含中文字符时出现了乱码的问题。


    二、尝试的解决方案:

            1、 查看从前端提交的数据到服务器端时是否已经产生了乱码。可以打印或者DUBUG调试一下,发现并没有出现乱码。为了保证服务器收到的数据缺失是正确的,特定添加了一个Filter,通过Filter,设置request 的编码为UTF-8,设置response的编码为UTF-8,简要代码如下 :   

                  //转换
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)resp;

if(this.encode != null && !this.encode.equals(""))
{
request.setCharacterEncoding(this.encode);
response.setCharacterEncoding(this.encode);
}
else
{
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
}

chain.doFilter(request, response);
                 以上为Filter的核心代码,关于web.xml的配置不在详细说明。提供参考的文档: http://blog.csdn.net/jesse621/article/details/12188355

            2、 从1中发现没有问题后,检查数据库的编码格式是否正确。自己使用的是SQLyog,创建表时使用了默认的编码。

                  1) 检查了数据库的的编码是否是UTF-8,发现并不是,然后改为UTF-8

                  2)检查了数据库表的编码是否为UTF-8,发现并不是,然后改为UTF-8


                   根据以上的检查结果,重新执行后,发现数据库字段依旧出现了乱码。再一次检查数据库的配置:确定以上两点后,这次将数据库的目标锁定为数据表的字段上。


                  3)使用SQLyog修改表时,在右上角有一个隐藏语言的选择项,默认情况下是选中的。取消选中状态,则可以编辑字段的编码格式,此时设置字段的编码的格式为                       UTF-8


                  根据1)、2)、3)步骤后,基本可以确定,数据库的编码格式已经没有大得问题,再次执行程序,发现数据库中依旧出现乱码。


            3、 根据1 和 2 可以确定,出现乱码的原因是在服务器提交数据到数据库的过程中产生的问题,而导致这个问题的原因是协议默认情况下是不支持中文的,需要设置连                  接数据的URL:

                 1)使用文本或者链接地址写到代码中(不推荐)时,实例如下:

                    jdbc:mysql://localhost:3306/tms?useUnicode=true&characterEncoding=utf8


                 2) 使用XML文件时:

                    jdbc:mysql://localhost:3306/tms?useUnicode=true&characterEncoding=utf8


                 特殊说明: xml中的&等同于文本中的&; 1)、2)中的黑体字便是要在URL上添加的编码设置


               重新执行程序,问题得到了解决。不再产生乱码问题。


           三、总结

                当从前端提交数据到服务端,再从服务端保存数据到数据库中时,如果出现数据库乱码,可以按照以下方法排查:

                1、首先java端从前端获取的数据是否已经产生乱码;

                2、检查数据库编码格式是否正确。推荐使用UTF-8

                     1) 数据库的编码是否正确

                     2) 表的编码是否正确

                     3)    表中字段的编码是否正确

                 3、检查服务端连接数据库的编码是否正确


                 通过以上三者,基本可以解决保存到数据库的数据出现乱码的问题。