У меня была похожая проблема.Когда я выкладываю форму и сохраняю ее в БД, она вставляется как ??????но если я вручную вставляю в БД с помощью MySQL WorkBench, он работает нормально.
Я думал, что проблема только в кодировке HTTP-запроса.Итак, я почти выполнил все рекомендации, которые нашел по этой проблеме, такие как изменение server.xml , добавление фильтра в web.xml и изменение настроек в конфигурационном файле MySQL my.ini но это не решает мою проблему.
Проблема была вызвана двумя причинами: http-кодировка запроса и соединение JDBC .По какой-то причине MySQL принимает данные как ISO-8859-1, а не как UTF-8.
Итак, я отменил все изменения и внес следующие два изменения: Измените Tomcat server.xml, как показано ниже:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
Изменить свойства соединения Jdbc, как показано ниже:
jdbc.driver_class=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/dB_Name?useUnicode=yes&characterEncoding=UTF-8
jdbc.username=root
jdbc.password
Ключ решения здесь добавляет useUnicode = yes & characterEncoding = UTF-8
Добавить фильтр, как @jbb, сделал в ** web.xml : **
<filter>
<filter-name>encoding-filter</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>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Если используется Thymeleaf, измените viewResolver иTemplateResolver, как показано ниже:
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setContentType("text/html; charset=UTF-8");
templateResolver.setCharacterEncoding("UTF-8");