| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Hibernate+MySQL правильная кодировка |
| Автор: kkorsakoff 3.10.2006, 13:35 |
| Использую Hibernate и автоматическое генерирование схемы. Для "обычных" String в случае MySQL получается примерно такая строка `username` varchar(255) character set latin1 NOT NULL default '' Соответственно при записи кириллицы пишутся всем до боли знакомые знаки вопросов Не пойму откуда берется latin1, и самое главное, где можно задать нужную кодировку (мне надо utf8). |
| Автор: kkorsakoff 3.10.2006, 17:50 |
| Из консоли mysql> show create table users. Подозреваю, что это придумал Hibernate. В принципе даже не суть важно откуда это. Как мне работать с кириллицей? |
| Автор: Slavca 3.10.2006, 18:56 | ||
| Я не пользовал hibernate, но нельзя ли в пропертях подключения к БД указать кодировку? В доке по connector'у для MySql написано:
Можно при подключении в url указать: jdbc:mysql://localhost/database_name?characterEncoding=utf8 Поправьте, если не прав. |
| Автор: kkorsakoff 3.10.2006, 19:18 |
| Указано давным давно. Даже для таблицы прописал DEFAULT CHARSET=utf8 COLLATE=utf8_bin Тут дело немного в другом, сами столбцы стоят в latin1. Тут уже кодировка коннекшена не причем. |
| Автор: 3x3 4.10.2006, 00:26 | ||||||||
Взял одну из тестовых таблиц и добавил к ней поле в вашей излюбленной кодировке:
Посмотрел чиво получилось:
Получилось что и требовалось: старые столбцы в юникоде, а этот новый - в латинице. Сделал так:
И стали все столбцы в юникоде. Классная штука этот ваш MySQL: заглянешь в мануал - и сразу понятно что следует делать в той или иной ситуации |
| Автор: kkorsakoff 4.10.2006, 12:57 |
| Вопрос не в том, как на уже готовой базе поменять кодировку. Спасибо конечно, но это не вызвало затруднений у меня Но задача заключается в том, чтобы Hibernate _САМА_ создавала схему, указывая MySQL что кодировка таблиц и столбцов utf8, а не latin1 |
| Автор: Slavca 4.10.2006, 17:22 | ||
| Мануал, как много в этом слове для сердца разработчика... На вот этой страничке http://dev.mysql.com/doc/refman/4.1/en/create-table.html написано:
Если я опять не угадал, то ты уж приведи кусочки кода. |
| Автор: kkorsakoff 4.10.2006, 21:32 |
| Возник вопрос: а отвечающие вообще когда-нибудь пользовались Hibernate и автоматической генерацией схемы? Зачем отвечать, не зная сути. |
| Автор: tux 5.10.2006, 06:44 |
| Нашел наконец немного времени попробовать сгенерировать схему из Hibernate в MySQL. Знаешь, похоже не в Hibernate дело. Он вообще не вставляет в сгенерированный скрипт никаких кодировок какие настройки не устанавливай. Думаю, ты уже наверняка проверил кодировку БД. В общем теряюсь в догадках. Может быть при старте MySQL или в my.ini задается latin1 как дефолтная кодировка? |
| Автор: sandello 5.10.2006, 07:51 |
| По собственному опыту - кодировка в MySQL та еще песня о главном :-) Когда надоело бодаться установил в настройках сервера кодировку для по умолчанию для сервера, для коннекта, etc: %grep -i utf /etc/my.cnf character-set-server = utf8 default-character-set = utf8 Вроде проблема решилась :-) |
| Автор: kkorsakoff 5.10.2006, 10:29 |
| Это хорошо, но админ не разрешил установить кодировку для сервера У него на это видимо есть свои админские причины. Да, hibernate ничего не вставляет (смотрел generated sql), но я думал, может есть способ заставить его это сделать. Видимо прийдется при загрузке приложения выполнять alter table .... Все равно спасибо за посильную помощь! |
| Автор: 3x3 5.10.2006, 12:50 | ||||||||
А до этого ты писал:
И ругался на тех, кто не прочел твои мысли правильно:
|
| Автор: kkorsakoff 8.12.2006, 13:36 |
| Да, кстати по поводу решения. Пришлось вручную делать alter table ... DEFAULT CHARSET=utf8 COLLATE=utf8_bin Видимо иначе никак. Ну или как сказал sandello - установить кодировку для сервера целиком. |
| Автор: Wowa 26.2.2007, 15:57 | ||
Можно и даже нужно после коннекта к базе давать запрос "SET NAMES utf8". Тогда серверные настройки кодировки мускула не будут иметь для тебя значения. |