powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / mysql кодировка
13 сообщений из 13, страница 1 из 1
mysql кодировка
    #34443831
MaximGL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток! Проблемма с кодировкой!
Извините за уже замученный вопрос, но уже просмотрел все темы сдесь и не только не могу понять в чем проблем!
В базу добавляется на русском и отображается нормально! А когда из влекаю записи все русские буквы вопросами. хелп

подключение к базе

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
 import  java.sql.*;
 import  java.util.Properties;
 public   class  dbConnect {
    
    /** Creates a new instance of db_connect */
     public  dbConnect() {
    }
    
     private  String getMysqlBase= "jdbc:mysql://host/base";
     private  String getLogin= "";
     private  String getPassword= "";
    
     public  Connection getConnection() 
     throws  SQLException, InstantiationException{
        
        Properties connInfo =  new  Properties();
        connInfo.put("user",  this .getLogin);
        connInfo.put("password",  this .getPassword);
        connInfo.put("useUnicode","true");
        connInfo.put("charaсterEncoding", "Cp1251");
        connInfo.put("characterSetResults","Cp1251");        
        Connection conn =  null ;
         try {
            Class .forName("com.mysql.jdbc.Driver").newInstance();
           conn = DriverManager.getConnection( this .getMysqlBase, connInfo); 
         //  Statement st = conn.createStatement();
          // int rs = st.executeUpdate("SET NAMES cp1251_general_ci");
          // st.close();
        } catch (Exception e){
             throw   new  SQLException("Unable to load the driver :" + e.getMessage());
        }
         return  conn;
    }
}


Сервлет вывода который ложит:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
 public   class  addMenu  extends  HttpServlet {
    
     private  makeSiteList siteList =  new  makeSiteList();
     private  dbConnect db          =  new  dbConnect();
        
     private  String formText(){
        formConstructor ob =  new  formConstructor("","menuAdd","POST","");
        ob.formText("Название: ", "fr_menu_name", "",  25 ,  255 , false, false);
        ob.formText("Ключевое слово: ", "fr_menu_keyw", "",  25 ,  50 , false, false);
        ob.formSelect("Сайт: ", "fr_menu_select",  this .siteList.name,  this .siteList.id,  1 );
        ob.formSubmit("menu_btn", "добавить");
         return  ob.getForm();
    }
    
     protected   void  doGet(HttpServletRequest request, HttpServletResponse response)
     throws  ServletException, IOException {
        
       response.setContentType("text/html;charset=windows-1251");
        PrintWriter out = response.getWriter();          
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet addMenu</title>");
        out.println("</head>");
        out.println("<body>");
        out.println(formText());       
        out.println("</body>");
        out.println("</html>");         
        out.close();
    }
    
    
     protected   void  doPost(HttpServletRequest request, HttpServletResponse response)
     throws  ServletException, IOException {  
        
        String in_menu_name   = request.getParameter("fr_menu_name");
        String in_menu_keyw   = request.getParameter("fr_menu_keyw");
        String in_menu_select = request.getParameter("fr_menu_select");
        String menu_btn       = request.getParameter("menu_btn");       
        
        response.setContentType("text/html;charset=windows-1251");
        PrintWriter out = response.getWriter();       
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet addMenu</title>");
        out.println("</head>");
        out.println("<body>");
             try {
                Connection mysqlConn = db.getConnection();
                PreparedStatement st = mysqlConn.prepareStatement("INSERT INTO site_menu" +
                                                                  "(id_site, title, keyw) VALUES(?, ?, ?)");                   
                st.setString( 1 , in_menu_select);
                st.setString( 2 , in_menu_name);
                st.setString( 3 , in_menu_keyw);
                st.executeUpdate(); st.close();  mysqlConn.close();  
                out.println("Данные успешно добавленны: <a href=addMenu>назад</a>");
            } catch (Exception e){
                out.println("addMenu: " + e);
            }
        out.println("</body>");
        out.println("</html>");         
        out.close();
    }       
    
}

Сервлет который отображает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
 public   class  archivMenu  extends  HttpServlet {
    
     private  dbConnect db =  new  dbConnect();    
 
   
     protected   void  doGet(HttpServletRequest request, HttpServletResponse response)
     throws  ServletException, IOException {
        response.setContentType("text/html;charset=Cp1251");            
        PrintWriter out = response.getWriter(); 
        
        out.println("<html>");
        out.println("<head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251;\"> ");
        out.println("<title>Servlet NewServlet</title>");      
        out.println("</head>");
        out.println("<body>");
        out.println("<table border=1 bordercolor=black>");       
        out.println("<tr> <td>Сайт</td> <td>Меню</td> <td>Keyw</td> <td>--</td> <td>--</td> </tr>");     
        
             try {
                Connection mysqlConn = db.getConnection();
                Statement st = mysqlConn.createStatement();
                ResultSet rs = st.executeQuery("SELECT * FROM site_menu");                
                 while  (rs.next()){
                    out.println("<tr>"); 
                        out.println(response.getCharacterEncoding());
                        out.println("<td>"+rs.getString("id_site")+"</td>");
                        out.println("<td>"+rs.getString("title")+"</td>");
                        out.println("<td>"+rs.getString("keyw")+"</td>");
                        out.println("<td> <a href=editMenu?id="+rs.getString("id")+">изменить</a> </td>");
                        out.println("<td> <a href=deleteMenu?id="+rs.getString("id")+">удалить</a> </td>");
                    out.println("</tr>");      
                }
                rs.close(); st.close(); mysqlConn.close();                
            } catch (Exception e){
                out.println("archiMenu: "+e);
            }
        out.println("</table>");
        out.println("</body>");
        out.println("</html>");      
        out.close();
    }
    
  
     protected   void  doPost(HttpServletRequest request, HttpServletResponse response)
     throws  ServletException, IOException {
       
    }
    
   
}
хелп плиз!
...
Рейтинг: 0 / 0
mysql кодировка
    #34443864
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какя кодировка самой базы/таблицы?

есть ли полная уверенность что приходящие из формы данные нормально декодировались в Unicode? Наплохо бы при получении данных добавить request.setCharacterEncoding("CP1251");
...
Рейтинг: 0 / 0
mysql кодировка
    #34443879
MaximGL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov какя кодировка самой базы/таблицы?

есть ли полная уверенность что приходящие из формы данные нормально декодировались в Unicode? Наплохо бы при получении данных добавить request.setCharacterEncoding("CP1251");


База на cp1251
Сравнение на cp1251_bin

Когда добавляются данные все нормально на русском. Потому что на php скрипт написали все номально извлекает на руском а вот на java нет.

request.setCharacterEncoding("CP1251");
Если это добавить то в базу тоже вопросы пихаются...
...
Рейтинг: 0 / 0
mysql кодировка
    #34444034
MaximGL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
   value =  new  String(rs.getString("id_site").getBytes("ISO-8859-1"), "Cp1251");                        
                        out.println("<td>"+value+"</td>");
                        value =  new  String(rs.getString("title").getBytes("ISO-8859-1"), "Cp1251");                        
                        out.println("<td>"+value+"</td>");
                        value =  new  String(rs.getString("keyw").getBytes("ISO-8859-1"), "Cp1251");                        
                        out.println("<td>"+value+"</td>");             

Вот так все работает, но это не приемлеммо я так писать сервлеты задал..юсь! Как это обойти? И почему он извлекает из базы в такой кодировке!??
...
Рейтинг: 0 / 0
mysql кодировка
    #34444103
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximGL
request.setCharacterEncoding("CP1251");
Если это добавить то в базу тоже вопросы пихаются...
- значит данные приходят в сервлет не в кодировке CP1251, а в какой то другой. Какой используете контейнер сервлетов?

- а страница в которой PHP нормально показал данные из базы, занесенные с помощью Java, в какой кодировке поазывается?
...
Рейтинг: 0 / 0
mysql кодировка
    #34444128
MaximGL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov MaximGL
request.setCharacterEncoding("CP1251");
Если это добавить то в базу тоже вопросы пихаются...
- значит данные приходят в сервлет не в кодировке CP1251, а в какой то другой. Какой используете контейнер сервлетов?

- а страница в которой PHP нормально показал данные из базы, занесенные с помощью Java, в какой кодировке поазывается?

Контейнер - apache-tomcat-5.5.17
Поставил SET NAMES cp1251_bin и все показало, вот если просто SET NAMES cp1251, то скрипт.пхп показывает ???????????? ?????? ???????
...
Рейтинг: 0 / 0
mysql кодировка
    #34444133
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximGLВот так все работает, но это не приемлеммо я так писать сервлеты задал..юсь! Как это обойти? И почему он извлекает из базы в такой кодировке!??
- потому что заносит в неправильной кодировке! Данные в сервлет попадают в кодировке CP1251, а сервлет по умолчанию считает что это ISO-8859-1 и неправильно конвертирует в Unicode или база все таки использует не CP1251, а ISO-8859-1
...
Рейтинг: 0 / 0
mysql кодировка
    #34444146
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- лучший вариант сделать базу в UTF-8 :)
...
Рейтинг: 0 / 0
mysql кодировка
    #34444170
MaximGL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov- лучший вариант сделать базу в UTF-8 :)

не могу сделать в utf-8, потому что база уже есть и ей полтара года и она на cp1251.
...
Рейтинг: 0 / 0
mysql кодировка
    #34444270
MaximGL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov MaximGLВот так все работает, но это не приемлеммо я так писать сервлеты задал..юсь! Как это обойти? И почему он извлекает из базы в такой кодировке!??
- потому что заносит в неправильной кодировке! Данные в сервлет попадают в кодировке CP1251, а сервлет по умолчанию считает что это ISO-8859-1 и неправильно конвертирует в Unicode или база все таки использует не CP1251, а ISO-8859-1

добавил строку request.setCharacterEncoding("Cp1251");
вправил кодировку(client charset - cp1251), только теперь что было русскими буквами все стало вопроссами! И когда даже через manager добавляю строку то все равно вопросики..
...
Рейтинг: 0 / 0
mysql кодировка
    #34444298
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а данные которые уже "давно" лежат в базе тоже показываются криво или только те которые заносятся сервлетом?


такое чуство, что данные в базе лежат криво, т. е. кодировка базы не соответствует кодировке хранящихся там данных. Какие кодировки показывают операторы SHOW CREATE DATABASE 'имяБазы' и SHOW CREATE TABLE 'имяТаблицы'
...
Рейтинг: 0 / 0
mysql кодировка
    #34450037
MaximGL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kachalov а данные которые уже "давно" лежат в базе тоже показываются криво или только те которые заносятся сервлетом?


такое чуство, что данные в базе лежат криво, т. е. кодировка базы не соответствует кодировке хранящихся там данных. Какие кодировки показывают операторы SHOW CREATE DATABASE 'имяБазы' и SHOW CREATE TABLE 'имяТаблицы'


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
 protected   void  doPost(HttpServletRequest request, HttpServletResponse response)
     throws  ServletException, IOException {    
       // request.setCharacterEncoding("Cp1251");
        String in_menu_name   = request.getParameter("fr_menu_name");
        String in_menu_keyw   = request.getParameter("fr_menu_keyw");
        String in_menu_select = request.getParameter("fr_menu_select");
        String menu_btn       = request.getParameter("menu_btn");       
        
        response.setContentType("text/html;charset=Windows-1251");
        PrintWriter out = response.getWriter();       
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Servlet addMenu</title>");
        out.println("</head>");
        out.println("<body>");
             try {
                Connection mysqlConn = db.getConnection();
                PreparedStatement st = mysqlConn.prepareStatement("INSERT INTO site_menu" +
                                                                  "(id_site, title, keyw) VALUES(?, ?, ?)");                   
                st.setString( 1 , in_menu_select);
                st.setString( 2 , in_menu_name);
                st.setString( 3 , in_menu_keyw);
                st.executeUpdate(); st.close();  mysqlConn.close();  
                out.println("Данные успешно добавленны: <a href=addMenu>назад</a>");
            } catch (Exception e){
                out.println("addMenu: " + e);
            }
        out.println("</body>");
        out.println("</html>");         
        out.close();
    }       

SHOW CREATE DATABASE 'имяБазы' -> cp1251
SHOW CREATE TABLE 'имяТаблицы'[/quot] -> cp1251 - cp1251_bin
в базу ложиться в вопросах
...
Рейтинг: 0 / 0
mysql кодировка
    #34450081
MaximGL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не знаю че ему надо может фильтр написать???
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / mysql кодировка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]