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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> И опять эти кодировки (MySql), дупликат темы из Баз данных 
:(
    Опции темы
Dzo
Дата 30.7.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Блин второй день мучаюсь, прочитал кучу мануалов, все темы на форуме и не помогло...

В общем есть у мну база с одной таблицей, куда я хочу записывать данные на родном могучем русском.
База у меня Mysql 5.0.51b, ОС Windows.

Что я делаю:

1. В MySql Administrator иду StartUp Variables->Advanced->Def.CharSet ставлю utf8 - > Apply Changes
2. Выбираю базу в Catalogs и каждой таблице прописываю CharSet в значение utf8
3. Перезагружаю сервис MySql

Теперь пример моей страницы с формой (JSP):
    
Код

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">



Пробовал несколько вариантов обработки входных данных:

Код

String subject = new String(request.getParameter("subject").getBytes(),"utf8");
String content = new String(request.getParameter("content").getBytes(),"utf8");


Или обычно:

Код

String subject = request.getParameter("subject");
String content = request.getParameter("content");



Мои запросы:
    
Код

String sqlQuery = "SET NAMES utf8";
Statement s = dbConnection.createStatement();
s.executeQuery(sqlQuery);
s.close();

                    
Код

PreparedStatement ps = dbConnection.prepareStatement("INSERT INTO " + MESSAGESTABLETITLE + "(" + MESSAGESTOCOLUMN + "," + MESSAGESFROMCOLUMN + "," + MESSAGESSUBJECTCOLUMN + "," + MESSAGESCONTENTCOLUMN + "," + MESSAGESISNEWCOLUMN + "," + MESSAGESISDRAFTCOLUMN + "," + MESSAGESISSYSTEMCOLUMN + "," + MESSAGESSTATUSISCOLUMN + "," + MESSAGESDATECOLUMN + ") VALUES (?,?,?,?,?,?,?,?,?);");
ps.setString(1, to);
ps.setString(2, from);
ps.setString(3, subject);
ps.setString(4, content);
ps.setString(5, "yes");
ps.setString(6, isDraft);
ps.setString(7, isSystem);
ps.setString(8, "no");
ps.setString(9, date);
ps.executeUpdate();
ps.close();



Все это ТОЧНО делается в одном соединение с базой.

Я перебрал все возможные кодировки, все равно выводится абракадабра:

Для utf8: Пишет ошибку: SQLException: Incorrect string value: '\xD1?\xD0\xB5\xD1?...' for column 'sendsubject' at row 1 Это для слова "тест"
Для cp1251: ???µ????

В разделе баз данных надоумили, что Java передает данные в кодировке ISO... Верное направление?

Как лечить? ХЭЛП! 
PM MAIL   Вверх
necromancer
Дата 30.7.2008, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



кодировку можно задать в урле подкллючения:
jdbc:mysql://localhost:3306/video?useUnicode=true&amp;characterEncoding=utf8

так же кодировка входящих параметров кодируется так:
new String(type.getBytes("ISO-8859-1"), "utf8");

String sqlQuery = "SET NAMES utf8";
Statement s = dbConnection.createStatement();
s.executeQuery(sqlQuery);
s.close();
это не требуется (по крайней мере, под Java, в PHP использую этот хак)


--------------------
С уважением, 
                 Виталий Смык
----------------------------------------------------------------------------------------------
SCJP, SCWCD, OCA
http://dev.maryno.net/video/
PM MAIL WWW ICQ Skype   Вверх
Dzo
Дата 31.7.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Так ну что-то проблема не очень решилась...

Что я имею:

Строка подключения:

Код

jdbc:mysql://localhost/dbName?useUnicode=true&characterEncoding=utf8&user=user&password=12345


Имею два <input type="text">, которые могут иметь в себе русский текст. Перевожу их:

Код


String subject = request.getParameter("subject");
String content = request.getParameter("content");

String subjectEncoded = new String(subject.getBytes("ISO-8859-1"), "utf8");
String contentEncoded = new String(content.getBytes("ISO-8859-1"), "utf8");


В настройках базы для таблиц прописаны utf8

Результат:
лолдододл (это я скопировал и вставил, в базе оно выглядит как жирные черные палочки)

Как лечить? : (((
PM MAIL   Вверх
alexadr
Дата 31.7.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я бы посоветовал в первую очередь подкорректировать вашу джавовую часть, т.е. я бы добавил фильтр, который бы задавал кодировку для реквеста, т.о. уберется порно типа этого:
Код

String subjectEncoded = new String(subject.getBytes("ISO-8859-1"), "utf8");
String contentEncoded = new String(content.getBytes("ISO-8859-1"), "utf8");


НУ а фильтр примерно такой:
Код

public class SetCharacterEncodingFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain)
    throws IOException, ServletException {
        request.setCharacterEncoding("UTF8");
        chain.doFilter(request, response);

    }
}


Соответственно его в web.xml добавляем. И уже дальше смотрим что почем.
PM MAIL   Вверх
tux
Дата 31.7.2008, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Одно уточнение. Этот фильтр в цепочке фильтров должен быть первым. 
PM MAIL Skype GTalk Jabber YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0851 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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