Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate + MySQL + Кирилица = ???????? / 21 сообщений из 21, страница 1 из 1
22.09.2011, 13:43:50
    #37451623
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate + MySQL + Кирилица = ????????
Кирилица превращается в знаки вопроса. Перепробовал варианты некоторые, не помогает. Не знаю в чем загвоздка.
Вроде как нужно какието проперти для хибернейта включить в нужное значение. Попробовал так:
Код: 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
22.09.2011, 13:56:42
    #37451647
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate + MySQL + Кирилица = ????????
Забыл дописать. Ещё в 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
22.09.2011, 16:00:59
    #37451941
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate + MySQL + Кирилица = ????????
Значит если вручную инсертом закидываю кирилицу в имеющуюся базу, то оно записывается как надо и выводится (читается темже хибернейтом из БД) потом как надо, а вот при записи в БД через хибернейт, то проблема.
...
Рейтинг: 0 / 0
22.09.2011, 16:11:44
    #37451967
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate + MySQL + Кирилица = ????????
Почему никто не помогает? Это секрет?
...
Рейтинг: 0 / 0
22.09.2011, 16:15:27
    #37451981
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate + MySQL + Кирилица = ????????
Кодировку надо прописывать в connection string к MySQL - инфа 100%. Решал именно так в свое время.
...
Рейтинг: 0 / 0
22.09.2011, 16:15:44
    #37451982
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate + MySQL + Кирилица = ????????
jabПочему никто не помогает? Это секрет?
Потому что этот вопрос в той или иной вариации задают почти каждую неделю.
Воспользуйтесь дебаггером чтобы посмотреть в каком виде данные из запроса попадают в классы. Может hibernate тут и не при чем.
...
Рейтинг: 0 / 0
22.09.2011, 16:40:59
    #37452048
jab
jab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate + MySQL + Кирилица = ????????
Хибернейт как раз причем.
Делаю экземпляр модели таблицы, явно пхаю туда кирилицу (чтоб исключить разные конвертации на входе контроллера через 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
22.09.2011, 17:09:46
    #37452110
svenom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate + MySQL + Кирилица = ????????
И все самое интересное - URL - не показали

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

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


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