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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> java+tomcat+mysql, русские символы в базе 
:(
    Опции темы
Atum
Дата 24.11.2012, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем добрый день !  до этого работал с oracle и postgresql - таких проблем никогда не было ...а тут 

возникла ошибка - которая описана похоже на всех форумах - но  ни один из рецептов мне не помог:( 

и так есть jsp - c  неё снимаем данные - которые в servlet'e- пишутся в java бин для простоты понимания id - int   и name - string

который потом через prepareStatement - заносится в базу. Все это utf-8.


есть tomcat -  в файле  
<Context>
<Resource> в котором указано что  
useUnicode = true
characterEncoding = utf-8
characterSetResults = utf-8

есть таблица в mysql - в которой тоже выполняю указано было что utf8   а так же выполнял уже alter table и ставлю ей CHARACTER SET UTF8


но все равно в нее попадают вопросики ????? ???? ??? 

что еще где надо прописать?


Это сообщение отредактировал(а) Atum - 24.11.2012, 15:32
PM MAIL   Вверх
Christoph
Дата 25.11.2012, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В твой контроллер данные с JSP страницы приходят в нормальной кодировке?


--------------------
user posted image
PM MAIL ICQ   Вверх
Atum
Дата 25.11.2012, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Christoph @ 25.11.2012,  01:21)
В твой контроллер данные с JSP страницы приходят в нормальной кодировке?

Да на моей стороне все ок! проверял как только мог - везде UTF.

даже пытался их преобразовывать - во что то другое  - но не угадал во что их можно преобразовать .

создавал новую строку перед записью в базу через new String(byte[] bytes, String charsetName)  

где charsetName  был кажется уже всем и cp866  и 1251 ... и iso 

 ничего не проходит - вместо"????? ?????" попадают другие странные символы ... 


вообще как работать с mysql из java  - когда в этой базе у каждой таблицы своя кодировка??? 

и при этом у одной таблицы указано cp1251 у другой cp866 ,у третьей UTF ... и русские буквы не пишутся никуда (((



Это сообщение отредактировал(а) Atum - 25.11.2012, 19:00
PM MAIL   Вверх
Atum
Дата 26.11.2012, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Заметил что как только я добавляю  текст в 


Код

 stmt = con.prepareStatement(
                    "INSERT INTO USER " +
                    "(message_text, user_id) " +
                    "VALUES (?, ?)");
// 1
String msg = "русский тест ";
           stmt.setString(1, msg);
//2
           stmt.setInt(2, 33);


 в IDE  netbeans  под дебагом - после строки //1

в stmt  - уже вопросы !!!! 

что это значит ? как сделать так чтобы там была нормальная строка?

Добавлено через 11 минут и 30 секунд
Вот мой context.xml из tomcat

Код



      <Resource name="jdbc/mytest"
                auth="Container" 
                type="javax.sql.DataSource"
                maxActive="4" 
                maxIdle="2" 
                maxWait="5000"
                username="***" 
                password="****" 
                driverClassName="com.mysql.jdbc.Driver"
                validationQuery="SELECT 1"
                useUnicode="true"
                encoding="UTF-8"
                characterEncoding="UTF-8"
                characterSetResults="UTF-8" 
                autoReconnect="true"
                url="jdbc:mysql://***.**.*.**:3306/**_***"/>



так получаю Connection
Код



    public static synchronized UsersDAO getInstance() {
        if (instance == null) {
            try {
                instance = new UsersDAO ();
                Context ctx = new InitialContext();
                instance.dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/mytest");
                con = dataSource.getConnection();
            
            } catch (NamingException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return instance;
    }


PM MAIL   Вверх
Christoph
Дата 26.11.2012, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



http://skipy.ru/technics/encodings_webapp.html

почитай возможно это поможет решить твою проблему


--------------------
user posted image
PM MAIL ICQ   Вверх
Atum
Дата 26.11.2012, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Christoph @ 26.11.2012,  16:35)
http://skipy.ru/technics/encodings_webapp.html

почитай возможно это поможет решить твою проблему

Да , хорошая статья = прочитал её одной из первых. 

у меня  уже все ломается еще в java коде ... 

в простом тесте = даже без jsp страниц .

Код

public class ConnectionMysql {
    public static void main(String[] args) throws ClassNotFoundException, SQLException, UnsupportedEncodingException {
      Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?useUnicode=yes&characterEncoding=UTF-8&user=root&password=root");
        PreparedStatement stmt = null; 
         stmt = con.prepareStatement("set names utf8");
        stmt.execute();
        stmt = con.prepareStatement("set character set utf8");
        stmt.execute();

        
           stmt = con.prepareStatement("INSERT INTO MESSAGE (message_text, user_id) VALUES (? ,?)");
          String  msg= "русские буквы  df df";
//1
            stmt.setString(1,msg );
//2
            stmt.setInt(2,33);
            stmt.execute();

    }
    
}

PM MAIL   Вверх
Vasay
Дата 26.11.2012, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Atum

А в какой кодировке файл исходника? 

А то я сталкивался в Эклипсе с приколами, когда он под виндой файлы в cp1251 создает. 


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Atum
Дата 27.11.2012, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Vasay @ 26.11.2012,  22:54)
Atum

А в какой кодировке файл исходника? 

А то я сталкивался в Эклипсе с приколами, когда он под виндой файлы в cp1251 создает.

Весь проект в UTF-8
PM MAIL   Вверх
jk1
Дата 27.11.2012, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Atum, а чем Вы базу-то смотрите?
Просто данные вполне могут лежать в базе как UTF, но из-за неюникодовой кодировки самого клиента к базе Вы их видите как ???.
Самый простой пример - консольный клиент к mysql, который по умолчанию использует какую-то совершенно левую кодировку. Пока не сделаешь в нем set names utf8; он даже полностью юникодовые данные отображает как ???


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Atum
Дата 27.11.2012, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(jk1 @ 27.11.2012,  10:35)
Atum, а чем Вы базу-то смотрите?
Просто данные вполне могут лежать в базе как UTF, но из-за неюникодовой кодировки самого клиента к базе Вы их видите как ???.
Самый простой пример - консольный клиент к mysql, который по умолчанию использует какую-то совершенно левую кодировку. Пока не сделаешь в нем set names utf8; он даже полностью юникодовые данные отображает как ???

обычный клиент -  тоже не работал !

проблема решилась странным образом ! в TOMCAT  ресурсе добавил явно в url параметр  ?characterEncoding=UTF-8
было 
Код

<Resource name="jdbc/mytest"
                auth="Container" 
                type="javax.sql.DataSource"
                maxActive="4" 
                maxIdle="2" 
                maxWait="5000"
                username="***" 
                password="****" 
                driverClassName="com.mysql.jdbc.Driver"
                validationQuery="SELECT 1"
                useUnicode="true"
                encoding="UTF-8"
                characterEncoding="UTF-8"
                characterSetResults="UTF-8" 
                autoReconnect="true"
                url="jdbc:mysql://***.**.*.**:3306/**_***"/>



в общем почему так - непонятно.


стало

Код

<Resource name="jdbc/mytest"
                auth="Container" 
                type="javax.sql.DataSource"
                maxActive="4" 
                maxIdle="2" 
                maxWait="5000"
                username="***" 
                password="****" 
                driverClassName="com.mysql.jdbc.Driver"
                validationQuery="SELECT 1"
                useUnicode="true"
                encoding="UTF-8"
                characterEncoding="UTF-8"
                characterSetResults="UTF-8" 
                autoReconnect="true"
                url="jdbc:mysql://***.**.*.**:3306/**_*** ?characterEncoding=UTF-8"/>


PM MAIL   Вверх
AntonSaburov
Дата 27.11.2012, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



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

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

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


 




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


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

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