JPA (Hibernate) кириллические символы

У меня есть приложение 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», попытался добавить characterEnc‌​oding=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 необходимо добавить в строку подключения.


person Piane_Ramso    schedule 25.12.2013    source источник


Ответы (1)


Отредактируйте настройки MySQL /etc/mysql/my.cnf и установите соответствие UTF-8 для всех подключений:

[client]
default-character-set = utf8

[mysqld]
init-connect='SET NAMES utf8'
character-set-server = utf8
collation-server = utf8_general_ci

[mysql]
default-character-set = utf8

После перенастройки рекомендуется пересоздать базу данных.

person eruiz    schedule 26.12.2013