Hibernate存取中文乱码问题

Hibernate存取中文乱码问题

进行web项目开发时,表单提交中文数据乱码,排查了很多原因,最终解决问题。

问题情况

前台提交数据:
Hibernate存取中文乱码问题_第1张图片
然后:

Hibernate存取中文乱码问题_第2张图片

名称栏出现了中文乱码,可能时提交数据时前台==>数据库,也可能是获取数据时数据库=>前台过程中出现中文字符编码问题。看了一下数据库:
Hibernate存取中文乱码问题_第3张图片
数据库中同样出现乱码,说明是:提交数据时前台==>数据库过程中出现了编码问题。

排查数据传递过程中可能存在的问题:


    CharacterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    
  
  
    CharacterEncodingFilter
    /*
  

在web.xml中已经配置过spring框架中的编码过滤器,该过滤器要做的其实就是强制为所有请求和响应设置编码格式:

request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");

因此此种方式能解决POST请求的中文编码问题。

检查表单提交是不是使用post方式:

<form class="form form-horizontal" id="form-admin-add" action="pp_exAdd.do" method="post" enctype="multipart/form-data">

method=“post”,没有问题。

检查数据库的字符集:
Hibernate存取中文乱码问题_第4张图片
也没有问题。

可能是hibernate框架将对象映射到数据库的过程中出现问题,打个断点调试一下。
Hibernate存取中文乱码问题_第5张图片
作为save()方法的参数,中文没有出现乱码问题,说明出题就出在了hibernate框架的save()方法中,原来在jdbc配置文件中应该加上一段参数,告知hibernate在映射数据库的过程中使用何种编码。

jdbc.url=jdbc:mysql://localhost:3306/xcxshop?useUnicode=true&characterEncoding=UTF-8

jdbc.url参数加上?useUnicode=true&characterEncoding=UTF-8。

注意:properties文件和hibernate.cfg.xml配置文件连接数据库的编码参数设置还有所不同:

hibernate.cfg.xml配置文件方式:



    jdbc:mysql://localhost:3306/xcxshop?useUnicode=true&characterEncoding=UTF-8
    

jdbc.properties配置文件方式:

jdbc.url=jdbc:mysql://localhost:3306/xcxshop?useUnicode=true&characterEncoding=UTF-8

hibernate.cfg.xml配置文件方式参数中有amp;
jdbc.properties配置文件方式参数中没有

你可能感兴趣的:(Java,Java,web,hibernate,编码,中文乱码)