| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Как сейвить в базу Кириличные данные? |
| Автор: schmidt 10.6.2009, 23:45 |
| Доброго времени суток! Есть база данних, в которой есть таблица professor, туда мне надо сейвить преподов с кириличной информацией. Когда вставляю запись в базу данних через пхпМайАдмин или через конольку, то все нормально с кодировками, работает то, что при создании базы данных я прописал set charset cp1251. Но когда я передаю данних о преподе через веб форму серелету-контроллеру, который потом передает это Хибернейту засейвить, то получаю ексепшин: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'first_name' at row 1 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3374) в поле first_name я вводил кирилицей |
| Автор: 5ad1sT 11.6.2009, 00:09 | ||
Мне кажется что тут проблема не в кодировке.. у тебя поле в базе ограниченного размера по символам, а ты туда заносиш слишком длинное слово/словосочетание.. |
| Автор: schmidt 11.6.2009, 00:32 |
| Когда английскими вводишь, То все нормально - сейвит. А поля в базе я всюда ставил на варЧар по 256 символов |
| Автор: Vasay 11.6.2009, 00:44 |
| schmidt, От cp1251 я бы отказался в пользу UTF-8 Посмотрите тему, может поможет: http://forum.vingrad.ru/forum/topic-173998/unread-1/hl/mysql/index.html |
| Автор: Старовъръ 13.6.2009, 17:41 |
| schmidt, ты б в дебагере глянул, может в сервлет данные приходят битые. |
| Автор: ShurikA 14.6.2009, 09:24 |
| schmidt, По моему дело всё в том что когда сервер получает кирилицу букбы превращаутся в ASCII коды, а они как известно не один знак (пробел это на пример. Вот и получается у тебя очень длинное поле. Попробый загнать в базу чтонибудь очень короткое, и посмотри. |
| Автор: Старовъръ 14.6.2009, 10:07 | ||
В общем нужно ждать топикстартера) |
| Автор: ShurikA 14.6.2009, 10:49 |
это латинские буквы один байт |
| Автор: Старовъръ 14.6.2009, 11:23 |
| Кол-во байт определяет кодировка. Юникод, в котором присутствуют и русские буквы, использует 2 байта для кодирования одного символа, не зависимо от того, английский это символ или китайский. ASCII - это не кодировка, это цифровое представление символов. На этой таблице базируется большинство(если не все) кодировки. В табице ASCII есть представление только английского алфавита. Всего там 128 символов. |
| Автор: schmidt 14.6.2009, 16:38 | ||
| В сервлет данные приходят корректно: вывожу параметры в файл - все корректно, все правильно. Но, получается, когда сервелт их передает классу ProfessorDAO, который делает сейв в базу, то в базе они отображаются некорректно. Напишу еще раз последовательность сохранения: Есть класс Professor - сущность, в которой инкапсулируются данние о профессоре Есть класс ProfessorDAO - клас, в котором определен метод
Вот сервлет и вызывает этот метод для сейва профессора в базе данных. Все равно в базе данных при просмотре отображаются знаки вопросов... |
| Автор: ShurikA 16.6.2009, 03:11 | ||
Вот это как раз наводит на мысль что есть проблемма с кодиривкой. Думаю UTF-8 поможет. |