У меня есть приложение Spring Roo, использующее JPA, реализованное через Hibernate. Я не могу использовать кириллические символы, потому что они становятся '????' в БД.
1) Прямая вставка кириллических символов в БД допустима.
2) Если в БД есть кириллические символы, то они нормально отображаются на веб-странице.
3) у меня есть такая часть конфига в web.xml
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4) При отладке (перед вставкой в БД) в IDE кириллические символы отображаются нормально, но после вставки и последующего выбора символы '????'.
5) Я попытался установить атрибут «accept-charset=UTF-8» в тег «form», попытался добавить characterEncoding=UTF-8 в URL-адрес БД, попытался установить следующие свойства гибернации:
<property name="hibernate.connection.charSet" value="UTF-8"/>
<property name="hibernate.connection.characterEncoding" value="UTF-8"></property>
<property name="hibernate.connection.useUnicode" value="true"></property>
Что еще может быть не так? Почему кириллические символы по-прежнему становятся '????' ?!
p.s. Ubuntu 13.04, MySQL 5.5, Spring 3.2, Spring Roo 1.2.3
upd: Наконец-то нашел решение: сгенерировал системную локаль ru_RU и ru_RU.UTF-8 и поставил локаль ru_RU.UTF-8. Подробная инструкция находится здесь. И, не могу объяснить почему, все работает нормально!.
p.p.s. Свойства characterEncoding и useUnicode из «5» не нужны. characterEncoding=параметр UTF-8 необходимо добавить в строку подключения.