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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с русским языком 
:(
    Опции темы
lavan
Дата 16.10.2011, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



народ подскажите кто знает!
имею базу данных с значениями полей как на русском так и на англ создавал так
Код

SET character_set_client=cp1251;
SET charachter_set_server=cp1251;
SET character_set_results=cp1251;
...
INSERT INTO TABLES VALUES('engleash text','русский текст');

если работаю через консоль mysql все отображается как надо,а когда подключаюсь через JDBC русский текст отображается кряказябрами  подключаюсь так
Код

Class.forName("com.mysql.jdbc.Driver");
        Properties p=new Properties();
    String url="jdbc:mysql://localhost/adept_system",pas="1234",name="root";
    p.put("user",name);
    p.put("password",pas);
    //p.put("useUnicode", "true");//и использовал и нет
    p.put("charSet","Cp1251");//писал и так "chracterEncoding","Cp1251"
    con=DriverManager.getConnection(url,p);

Делеал нужные установки
Код

st.executeUpdate("set character_set_client=cp1251");
    st.executeUpdate("set character_set_server=cp1251");
    st.executeUpdate("set character_set_results=cp1251");
    st.executeUpdate("set character_set_connection=cp1251");

ничего не помагает,русский язык не отображается
Код

ArrayList<String>tmp=new ArrayList<String>();
      try{
      while(rs.next()){
          int size=rs.getMetaData().getColumnCount();
          for(int i=1;i<size;i++){
              tmp.add(rs.getString(i));//ЗДЕСЬ кряказябры
          }


КАК ЭТО ИСПРАВИТЬ? smile 
PM MAIL   Вверх
Stolzen
Дата 16.10.2011, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 23
Всего: 48



Используйте utf8


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
lavan
Дата 16.10.2011, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 smile 
PM MAIL   Вверх
lavan
Дата 17.10.2011, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрался до возврата русских букв,только возвращаются не те буквы которые в базе! все это выполняю в консоли mysql
Код

character_set_database=utf8

для того чтобы заполнить таблицу делаю
Код

SET names cp1251

теперь могу вносить русский текст!и при работе в консоли все работает.
Теперь подключаюсь через JDBC использую драйвер mysql-connector-java-5.1.6-bin.jar
Код

public void dbConnect() throws ClassNotFoundException,SQLException{//подкл к б.д
        Class.forName("com.mysql.jdbc.Driver");
        Properties p=new Properties();
    String url="jdbc:mysql://localhost/adept_system",
            pas="1234",name="root";
    p.put("user",name);
    p.put("password",pas);
    //p.put("useUnicode", "true");//подключал и отключал
    p.put("charSet","Cp1251");//вставлял и utf8
    con=DriverManager.getConnection(url,p);
    }

Настройка для текущего подключения
Код

public void localAdjust()throws SQLException{
    st.executeUpdate("set names 'cp1251'");//заменяет client,server,results
    st.executeUpdate("set character_set_connection=cp1251");
    st.executeUpdate("set collation_connection='cp1251_general_ci'");
}

Теперь здесь 
Код

while(rs.next()){
          int size=rs.getMetaData().getColumnCount();
          for(int i=1;i<=size;i++){
              String s=rs.getString(i);
              String ss=new String(rs.getBytes(i),"Cp1251");
          }

отображаются русские буквы,но я ввел(например) "ячс" а отобразилось "пзб" ЧТО за фигня? smile 
PM MAIL   Вверх
math64
Дата 17.10.2011, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Будь проще:
Код

    private static final String host = "localhost";
    private static final String database = "database";
    private static final String dbEncoding = "Cp1251";
    private static final String user = "user";
    private static final String password = "password";
    private static final String driver = "com.mysql.jdbc.Driver";
    private static final String url =
            "jdbc:mysql://" + host + "/" + database +
            "?useUnicode=true&characterEncoding=" + dbEncoding;
    private Connection connection;
    {
      try {
        Class.forName(driver).newInstance();
        connection = DriverManager.getConnection(url, user, password);
      } catch (SQLException ex) {
        ex.printStackTrace();
      } catch (Exception ex) {
        ex.printStackTrace();
      }
    }

и больше никакой возни с кодировками - в select все String получаешь с русскими буквами, при insert пишется в 1251.
PM   Вверх
lavan
Дата 17.10.2011, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

set character_set_client=cp1251

а теперь когда делаю запрос через JDBC полчить нужную строку получилось только так
Код

String sss=new String(rs.getBytes(i),"Cp866");

т.е получается что mysql тупо забил на мое указание кодировки и все положил в его родной Cp866? Либо это как-то связанно с сессиями?

Это сообщение отредактировал(а) lavan - 17.10.2011, 15:20
PM MAIL   Вверх
Pawl
Дата 17.10.2011, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот сервлетик с jsp, работающий с mySql, который я как-то делал в учебно-воспитательных целях. Он у меня работал как часы. Надеюсь, тебе это поможет!


Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  GuestBooks.zip 474,84 Kb


--------------------
В действительности всё совсем не так, как на самом деле
PM MAIL   Вверх
math64
Дата 18.10.2011, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Цитата(lavan @  17.10.2011,  14:03 Найти цитируемый пост)
т.е получается что mysql тупо забил на мое указание кодировки и все положил в его родной Cp866? Либо это как-то связанно с сессиями?

Как ты забивал данные в сервер? Из консоли? А консоль работает в Cp866. И передает серверу в Cp866, который считает, что данные идут в Cp1251 и спокойно складывает из базу без перекодировки. Смени кодировку консоли или правильно настрой сервер (т.е. вероятно кодировку клиента нужно установить в Cp866).
В Яве никаких set character_set_...=cp1251 делать не нужно - кодировки задаются при коннекте.

Добавлено через 1 минуту и 37 секунд
А родная кодировка для mysql - это latin1
PM   Вверх
lavan
Дата 18.10.2011, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

А консоль работает в Cp866

секунду,а если я когда ложил данные в консоли,явно указал кодировку
Код

set character_set_client=cp1251

все равно сохранится в кодировке Cp866?
PM MAIL   Вверх
math64
Дата 18.10.2011, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Нужно в косоли (до входа в базу) набрать chcp. Она выдаст:
Текущая кодовая страница: 866
Теперь набери chcp 1251, ответ: 
Текущая кодовая страница: 1251
Вот теперь можешь входить в базу и сообщать ей, что у тебя кодировка 1251. А раньше ты обманывал её, говоря что у тебя кодировка 1251, а на самом деле 866.
Но это если работать через консоль.
Если таблицы создавать и записывать с помощью java, нужен только тот код который я привёл выше.
А лучше настроить mysql в файлах конфигурации (по умолчанию mysql работает в кодировке latin1), но для этого нужны права администратора, и что для этого делать не скажу - у меня сейчас mysql не установлена.


PM   Вверх
Skipy
Дата 19.10.2011, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



lavan, почитайте вот это:

http://www.skipy.ru/technics/encodings.html
http://www.skipy.ru/technics/encodings_webapp.html
http://www.skipy.ru/technics/encodings_console_comp.html

Там про кодировки вообще, работающий пример с MySQL в частности, ну и про консоль есть.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
langzi
Дата 19.10.2011, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Модератор: Сообщение скрыто.

PM MAIL   Вверх
lavan
Дата 19.10.2011, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем спасибо за помощь,буду разбираться
PM MAIL   Вверх
lavan
Дата 20.10.2011, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Никак не могу въехать smile 
Хорошо с консолью разобрались.Данные хранятся в Cp866.При подключении к б.д из проги я должен указать в какой кодировке у меня там хранятся данные? Т.е эта строка
Код

String url="jdbc:mysql://localhost/mydb"+"?useUnicode=true&characterEncoding=Cp866"

говорит,что данные хранятся в characterEncoding=Cp866 ? и все дальнейшие вызовы getXXX должны правильно декодировать данные.Но реальность показывает что я ошибаюсь
Код

String s=rs.getString(i);//Не возвр строку в нужной кодировке.Декодирование происходит правильно(нет ?) и
//попытки интерпретировать двухбайтовую строку как однобайтовую не происходит

И без этого
Код

st.executeUpdate("set character_set_client=cp1251");
    st.executeUpdate("set character_set_results=cp1251");
............

Тоже не работает

Это сообщение отредактировал(а) lavan - 20.10.2011, 14:36
PM MAIL   Вверх
math64
Дата 20.10.2011, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



У тебя консольное приложение или гуи? Как смотришь результаты? Если через System.out.println() то увидишь кракозябры - по той же причине - кодировка консоли 866, а не 1251.
(В отладчике или при выводе в гуи вывод должен быть нормальным, если не нашаманил с настройками - я, например set character_set_... не пользовался).
В jsp тоже можно получить кракозябры - tomcat по умолчанию тоже работает в latin1.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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