Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate+MySQL правильная кодировка 
:(
    Опции темы
kkorsakoff
Дата 3.10.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 6
Всего: 14



Использую Hibernate и автоматическое генерирование схемы. 
Для "обычных" String в случае MySQL получается примерно такая строка 

`username` varchar(255) character set latin1 NOT NULL default ''

Соответственно при записи кириллицы пишутся всем до боли знакомые знаки вопросовsmile

Не пойму откуда берется latin1, и самое главное, где можно задать нужную кодировку (мне надо utf8).

PM MAIL WWW ICQ   Вверх
tux
Дата 3.10.2006, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Вот это:
Цитата(kkorsakoff @  3.10.2006,  18:35 Найти цитируемый пост)
`username` varchar(255) character set latin1 NOT NULL default ''

откуда? Из дампа базы или это реально Hibernate такое сгенерировал?
PM MAIL Skype GTalk Jabber YIM   Вверх
kkorsakoff
Дата 3.10.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 6
Всего: 14



Из консоли mysql> show create table users.
Подозреваю, что это придумал Hibernate.
В принципе даже не суть важно откуда это. Как мне работать с кириллицей?smile
PM MAIL WWW ICQ   Вверх
Slavca
Дата 3.10.2006, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 17.2.2005
Где: Новосибирск

Репутация: 1
Всего: 5



Я не пользовал hibernate, но нельзя ли в пропертях подключения к БД указать кодировку?
В доке по connector'у для MySql написано:
Код

To allow multiple character sets to be sent from the client, the "UTF-8" encoding should be used,
either by configuring "utf8" as the default server character set, or by configuring the JDBC driver
to use "UTF-8" through the characterEncoding  property.

Можно при подключении в url указать:
jdbc:mysql://localhost/database_name?characterEncoding=utf8

Поправьте, если не прав.

Это сообщение отредактировал(а) Slavca - 3.10.2006, 19:00
PM ICQ   Вверх
kkorsakoff
Дата 3.10.2006, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 6
Всего: 14



Указано давным давно. Даже для таблицы прописал DEFAULT CHARSET=utf8 COLLATE=utf8_bin
Тут дело немного  в другом, сами столбцы стоят в latin1. Тут уже кодировка коннекшена не причем.
PM MAIL WWW ICQ   Вверх
3x3
Дата 4.10.2006, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 5
Всего: 8



Цитата(kkorsakoff @ 3.10.2006,  19:18)
Указано давным давно. Даже для таблицы прописал DEFAULT CHARSET=utf8 COLLATE=utf8_bin
Тут дело немного  в другом, сами столбцы стоят в latin1. Тут уже кодировка коннекшена не причем.

Взял одну из тестовых таблиц и добавил к ней поле в вашей излюбленной кодировке:
Код

ALTER TABLE `xtest` ADD `comment` varchar(255) character set latin1 NOT NULL default ''


Посмотрел чиво получилось:

Код

select COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME from information_schema.columns where table_name='XTEST';


Получилось что и требовалось: старые столбцы в юникоде, а этот новый - в латинице.

Сделал так:
Код

ALTER TABLE `xtest` MODIFY `comment` varchar(255) character set 'utf8' NOT NULL default ''


И стали все столбцы в юникоде.

Классная штука этот ваш MySQL: заглянешь в мануал - и сразу понятно что следует делать в той или иной ситуации smile


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
kkorsakoff
Дата 4.10.2006, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 6
Всего: 14



Вопрос не в том, как на уже готовой базе поменять кодировку. Спасибо конечно, но это не вызвало затруднений у меняsmile

Но задача заключается в том, чтобы Hibernate _САМА_ создавала схему, указывая MySQL что кодировка таблиц и столбцов utf8, а не latin1
PM MAIL WWW ICQ   Вверх
Slavca
Дата 4.10.2006, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 17.2.2005
Где: Новосибирск

Репутация: 1
Всего: 5



Мануал, как много в этом слове для сердца разработчика...
На вот этой страничке
http://dev.mysql.com/doc/refman/4.1/en/create-table.html
написано:
Код

table_option:
...
  | [DEFAULT] CHARACTER SET charset_name


Если я опять не угадал, то ты уж приведи кусочки кода.
PM ICQ   Вверх
kkorsakoff
Дата 4.10.2006, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 6
Всего: 14



Возник вопрос: а отвечающие вообще когда-нибудь пользовались Hibernate и автоматической генерацией схемы? Зачем отвечать, не зная сути.

Это сообщение отредактировал(а) kkorsakoff - 4.10.2006, 21:33
PM MAIL WWW ICQ   Вверх
tux
Дата 5.10.2006, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Нашел наконец немного времени попробовать сгенерировать схему из Hibernate в MySQL. Знаешь, похоже не в Hibernate дело. Он вообще не вставляет в сгенерированный скрипт никаких кодировок какие настройки не устанавливай. Думаю, ты уже наверняка проверил кодировку БД. В общем теряюсь в догадках. Может быть при старте MySQL или в my.ini задается latin1 как дефолтная кодировка?
PM MAIL Skype GTalk Jabber YIM   Вверх
sandello
Дата 5.10.2006, 07:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: нет
Всего: 2



По собственному опыту - кодировка в MySQL та еще песня о главном :-)
Когда надоело бодаться установил в настройках сервера кодировку для по умолчанию для сервера, для коннекта, etc:
%grep -i utf /etc/my.cnf
character-set-server = utf8
default-character-set = utf8

Вроде проблема решилась :-)


--------------------
user posted image
PM MAIL Jabber   Вверх
kkorsakoff
Дата 5.10.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 6
Всего: 14



Это хорошо, но админ не разрешил установить кодировку для сервераsmile
У него на это видимо есть свои админские причины.
Да, hibernate ничего не вставляет (смотрел generated sql), но я думал, может есть способ заставить его это сделать.
Видимо прийдется при загрузке приложения выполнять alter table ....

Все равно спасибо за посильную помощь! smile 
PM MAIL WWW ICQ   Вверх
3x3
  Дата 5.10.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 261
Регистрация: 17.9.2006

Репутация: 5
Всего: 8



Цитата(kkorsakoff @ 5.10.2006,  10:29)
я думал, может есть способ заставить его это сделать.


А до этого ты писал:
Цитата

Подозреваю, что это придумал Hibernate.


И ругался на тех, кто не прочел твои мысли правильно:

Цитата

Зачем отвечать, не зная сути.



M
batigoal
Посто отредактирован. Больше сдержанности. У-саа....


Это сообщение отредактировал(а) batigoal - 5.10.2006, 15:02


--------------------
Зачем платить больше,
когда можно заплатить дважды?
PM   Вверх
kkorsakoff
Дата 8.12.2006, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 6
Всего: 14



Да, кстати по поводу решения.
Пришлось вручную делать alter table ... DEFAULT CHARSET=utf8 COLLATE=utf8_bin 
Видимо иначе никак. Ну или как сказал sandello - установить кодировку для сервера целиком.
PM MAIL WWW ICQ   Вверх
Wowa
Дата 26.2.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: нет
Всего: 290



Цитата(kkorsakoff @  8.12.2006,  11:36 Найти цитируемый пост)
Видимо иначе никак. Ну или как сказал sandello - установить кодировку для сервера целиком. 

Можно и даже нужно после коннекта к базе давать запрос "SET NAMES utf8". Тогда серверные настройки кодировки мускула не будут иметь для тебя значения.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1757 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.