powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate + MySQL + Кирилица = ????????
21 сообщений из 21, страница 1 из 1
Hibernate + MySQL + Кирилица = ????????
    #37451623
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кирилица превращается в знаки вопроса. Перепробовал варианты некоторые, не помогает. Не знаю в чем загвоздка.
Вроде как нужно какието проперти для хибернейта включить в нужное значение. Попробовал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    <bean id="sessionFactory" parent="sessionFactoryParent">
        <property name="dataSource" ref="dataSource" />
	<property name="hibernateProperties">
            <props merge="true">
                <prop key="hibernate.dialect">${database.dialect}</prop>
                <prop key="connection.characterEncoding">UTF- 8 </prop>
            </props>
	</property>
    </bean>

А именно строчка <prop key="connection.characterEncoding">UTF-8</prop> не помогла. Может её не туда подключил? Может надо что пропи сать в бин <bean name="dataSource" или в бин <bean id="sessionFactoryParent" в общем х.з.

База MySQL что идет в комплекте EasyPHP 5.3.7.0.
Изначально создавал базу в кодировке WIN1251, сейчас создал в utf8_unicode_ci и тже не помогло. Файл настроек my.ini свойство default-character-set=utf8 не менял, стоит по умолчанию.

Напишите плиз по порядку, что и в какую сторону подкрутить, а то не могу понятьт, что не так.
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37451647
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл дописать. Ещё в web.xml у меня прописано:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    <filter>
        <filter-name>charsetFilter</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>charsetFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Но это всё не помогает.
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37451941
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит если вручную инсертом закидываю кирилицу в имеющуюся базу, то оно записывается как надо и выводится (читается темже хибернейтом из БД) потом как надо, а вот при записи в БД через хибернейт, то проблема.
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37451967
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему никто не помогает? Это секрет?
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37451981
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кодировку надо прописывать в connection string к MySQL - инфа 100%. Решал именно так в свое время.
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37451982
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabПочему никто не помогает? Это секрет?
Потому что этот вопрос в той или иной вариации задают почти каждую неделю.
Воспользуйтесь дебаггером чтобы посмотреть в каком виде данные из запроса попадают в классы. Может hibernate тут и не при чем.
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452048
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хибернейт как раз причем.
Делаю экземпляр модели таблицы, явно пхаю туда кирилицу (чтоб исключить разные конвертации на входе контроллера через POST с страницы) и в базу пишутся по прежнему знаки вопроса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    @Autowired
     private  CommentsDao commentsDao;

...
Comments comment =  new  Comments();
...
comment.setComment("Привет!");
commentsDao.addComment(comment);

Повторюсь, в туже самую БД инсертом кирилица пишется нормально.
Куда смотреть х.з.
Файл настроек выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-2.5.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

    <context:property-placeholder location="classpath:application.properties"/>

    <bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${database.driverClassName}" />
        <property name="url" value="${database.url}" />
        <property name="username" value="${database.user}" />
        <property name="password" value="${database.password}" />
    </bean>

    <bean id="sessionFactoryParent" abstract="true" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
	<property name="hibernateProperties">
            <props>
<!--            <prop key="hibernate.hbm2ddl.auto">create</prop>-->
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.cache.use_second_level_cache">true</prop>
                <prop key="hibernate.cache.use_query_cache">true</prop>
                <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop>
                <prop key="net.sf.ehcache.configurationResourceName">ehcache.xml</prop>
            </props>
	</property>
	<property name="annotatedClasses">
            <list>
                <value>com.mycom.appbook.model.Account</value>
                <value>com.mycom.appbook.model.Authorities</value>
                <value>com.mycom.appbook.model.Books</value>
                <value>com.mycom.appbook.model.Comments</value>
            </list>
	</property>
    </bean>

    <bean id="sessionFactory" parent="sessionFactoryParent">
        <property name="dataSource" ref="dataSource" />
	<property name="hibernateProperties">
            <props merge="true">
                <prop key="hibernate.dialect">${database.dialect}</prop>
                <prop key="hibernate.connection.Useunicode">true</prop>
                <prop key="hibernate.connection.charSet">UTF- 8 </prop>
                <prop key="connection.characterEncoding">UTF- 8 </prop>
            </props>
	</property>
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452110
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все самое интересное - URL - не показали

Вот решение.
1) Строка должна выглядеть вот так: jdbc:mysql://hostname:port/database?useUnicode=true&characterEncoding=utf8
2) Из конфига Хибера все упоминания UTF-8 убрать
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452115
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит смотрел я только что отладчиком. В результате увидял следующиее:
В comments приходит кирилица.
В comment.setComment(comments); вижу кирилицу.
В методе
Код: plaintext
1.
2.
3.
     public   void  setComment(String comment) {
         this .comment = comment;
    }
вижу кирилицу.
В this.comment пишется кирилица.
Дальше уходит в commentsDao.addComment(comment); и там разные хэшмапы и т.д. и там нихрена не могу понять.
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452116
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С чем возможно придется поиграться:
1) Поменять & на & в строке подключения
2) Поменять utf8 на сз1251 там же.
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452123
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
database.url=jdbc:mysql://localhost/appbook
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452125
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В MySQL, вроде кроме кодировки базы есть ещё кодировка на каждую таблицу. При всяческих манипуляциях они могут вдруг несовпасть.
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452127
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Движок форума сожрал амперсанд. В моем прошлом сообщении было написано:
" & возможно придется поменять на &аmp; "
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452134
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опаньки! Поменял url, что указал выше на database.url=jdbc:mysql://localhost/appbook?useUnicode=true&characterEncoding=utf8
как и советовали, и больше ничего не менял и проперти не удалял и всё заработало.
Спасибо!
Теперь ещё хотелось бы понять, почему так?
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452191
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabОпаньки! Поменял url, что указал выше на database.url=jdbc:mysql://localhost/appbook?useUnicode=true&characterEncoding=utf8
как и советовали, и больше ничего не менял и проперти не удалял и всё заработало.
Спасибо!
Теперь ещё хотелось бы понять, почему так?
У вас база в UTF-8, а драйвер берет локальную кодировку - cp1251.
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452203
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яж выше писал, что я БД пробовал разные варианты создавать и в том числе cp1251 было. Значит драйвер брал вообще х.з. что и откуда. По идее проперти должны были указывать кодировку? Зачем тогда проперти эти нужны, если они не нужны на самом деле?
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452226
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, возможно если бы вы написали
hibernate.connection.characterEncoding=utf8
то помогло бы
но это ещё сильно зависит от того как как именно Hibernate передаёт properties в datasource.
Т.е. именно characterEncoding на уровне хибера ничего не далает. Хибер просто пробрасывает все
hibernate.connection.* из своих настроек в datasource
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452227
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabЗачем тогда проперти эти нужны, если они не нужны на самом деле?
Мы ж не знаем откуда вы их выдумали. 8)
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452244
jab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А выдумал я их из интернета... прежде чем тут задавать вопросы.
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37452254
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jabА выдумал я их из интернета... прежде чем тут задавать вопросы.
"В интернете всё правда". А надо было из манула описание почитать.
...
Рейтинг: 0 / 0
Hibernate + MySQL + Кирилица = ????????
    #37808491
tarasslinko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczНу, возможно если бы вы написали
hibernate.connection.characterEncoding=utf8
то помогло бы
но это ещё сильно зависит от того как как именно Hibernate передаёт properties в datasource.
Т.е. именно characterEncoding на уровне хибера ничего не далает. Хибер просто пробрасывает все
hibernate.connection.* из своих настроек в datasource

Велике дякую! В мене теж була проблема з кирилицею, і мені допомогло ваше повідомлення, тільки рядок, який я додав має вигляд:
Код: xml
1.
<property name="hibernate.connection.characterEncoding">utf8</property>
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate + MySQL + Кирилица = ????????
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]