2016-09-30 1 views
0

MySQL 데이터베이스 프로그램에서 이전에 기록한 데이터를 가져 오는 중에 문제가 있습니다. mysql과 Netbeans를 모두 검사했는데 인코딩은 utf-8 이었지만 여전히 이런 종류의 문제가 있습니다. 팁이 있습니까?Mysql에서 데이터를 가져올 때 문자 관련 문제가 발생했습니다.

My application

MySQL은 문제없이 데이터를 보여줍니다 :

This is when I read from database

+1

코드를 표시하지 않았으므로 도움을받을 수 없습니다. –

+0

BLOB 인 경우 바이너리로 간주하고 필요한 유형으로 변환해야합니다. – Yaman

답변

0

내가 넷빈즈와 맥에있어 8.2

내 응용 프로그램이 같은 데이터를 보여줍니다 질문은 정확하지 않으므로 시도 할만한 몇 가지 사항이 있습니다. 데이터베이스를 연결 한 후 데이터 삽입하기 전에

, 자바 프론트 엔드 응용 프로그램에서 그 문을 추가합니다 : 아마

SET character_set_connection="utf8" 
SET character_set_client="utf8" 
SET character_set_database="utf8" 
SET character_set_results="utf8" 
SET character_set_server="utf8" 
SET character_set_system="utf8" 

당신이 그들 모두를 필요로하지 것이다; 어떤 사람들이 트릭을 실험 해보십시오.

당신은 또한 MySQL의 콘솔에 로그인하고 명령을 실행하여 실제 설정을 볼 수는 :

mysql> show variables like '%character_set%'; 
+0

업데이트 ... 내 테스트 중에이 문제는 JTextArea에서만 발생합니다. 실제로 JTextField는 데이터를 올바르게 수신합니다. 문제는 구성 요소입니다 – Magobin

+0

그 문제는 Blob 콘텐트라고 생각합니다. 바이트를 가져 와서 Utf-8과 ISO-8859-1로 변환하려고 시도했지만 아무 것도 변경되지 않았습니다 ... 나는 또한 긴 텍스트에서 BLOB를 변경하고 데이터를 변경하려고했습니다. "è"에서 문법 오류가 발생했습니다 ... – Magobin

+0

해결 : 문제는 Blob Content였습니다. TEXT 또는 MEDIUM TEXT를 사용하여 모든 것을 해결했습니다. 특수 문자에 문제가있는 사용자의 경우 Mysql에 문자열을 저장하는 가장 좋은 방법은 Prepared Statement입니다. – Magobin

0

이것은 생성 JTextArea에 모든 데이터가

private void popolaPianificazione(){ 

    String tipo="Pianificazione"; 
    String sql = "SELECT * FROM DomandePianificazione"; 
    ResultSet res = null; 
    try { 
     res = MysqlStuff.richiediDatiSQL(sql); 
     if(res != null){ 

      res.last(); 
      if(res.getRow() != 0){ 
       res.beforeFirst(); 

       while(res.next()){ 
        final String contatore = res.getString("id"); 
        int conta = Integer.parseInt(contatore); 
        JPanel temp = new javax.swing.JPanel(new MigLayout("fill","grow")); 
        temp.setBorder(javax.swing.BorderFactory.createTitledBorder("DOMANDA "+"["+conta+"]")); 
        String domande = res.getString("Domanda"); 
        domande.replace("è", "p"); 
        javax.swing.border.Border border = BorderFactory.createEtchedBorder(); 
        JTextArea domanda = new javax.swing.JTextArea(domande,2,2); 
        domanda.setBorder(border); 
        domanda.setBackground(colore); 
        domanda.setSize(400, 100); 
        domanda.setFont(font); 
        domanda.setMinimumSize(new Dimension(400,100)); 
        domanda.setLineWrap(true); 
        domanda.setWrapStyleWord(true); 
        domanda.setOpaque(false); 
        domanda.setEditable(false); 
        JCheckBox rispostaC = new javax.swing.JCheckBox("Si/No"); 
        JCheckBox rispostaCom = new javax.swing.JCheckBox("A completamento"); 
        String rispostaCheck = res.getString("rispostaCheck"); 
        String rispostaCompleta = res.getString("rispostaCompleta"); 
        if (!"no".equals(rispostaCheck)){ 

         rispostaC.setSelected(true); 
        } 
        else{ 

        rispostaCom.setSelected(true); 
        } 
        JButton edit = new javax.swing.JButton("Modifica la domanda"); 

        ButtonGroup buttonGroup1 = new javax.swing.ButtonGroup(); 
        buttonGroup1.add(rispostaC); 
        buttonGroup1.add(rispostaCom); 
        rispostaC.setEnabled(false); 
        rispostaC.setRolloverEnabled(false); 
        rispostaCom.setEnabled(false); 
        rispostaCom.setRolloverEnabled(false); 

        temp.add(edit,"wrap"); 

        edit.addActionListener(new ActionListener(){    
         @Override 
         public void actionPerformed(ActionEvent e) { 

          if ("Salva le modifiche".equals(edit.getLabel())){ 
          System.out.println("Sto salvando..."); 
          String pannello = "DomandePianificazione"; 

           try { 
            SalvaDomanda(tipo,contatore,domanda,rispostaC,rispostaCom,pannello); 

            PanelPianificazione.revalidate(); 
            PanelPianificazione.repaint(); 
           } catch (SQLException ex) { 
            Logger.getLogger(ManageQuestionario.class.getName()).log(Level.SEVERE, null, ex); 
           } 

을 SKIP 코드입니다

그리고 이것은 mysql에 데이터를 보내기위한 코드입니다 :

  public static void inviaDatiSQL(String sql,String stat) throws SQLException, ClassNotFoundException{ 
      UP = connetti(); 
    System.out.println("INVIO dati a DB: \n"+ sql); 
    Statement stmt = null; 

      PreparedStatement test = UP.prepareStatement(sql); 
      test.setString(1, stat); 

    test.executeUpdate(); 
    System.out.println("Finito !"); 
} 
+0

대체는 약간의 테스트입니다 .... – Magobin

0

좋아, 해결했습니다. 기본적으로 그것은 BLOB 인 Mysql의 Column 데이터에 관한 문제였습니다 ... 이미 LONGTEXT에서 변경하려고했지만, 단지 유형이 변경된 경우 모든 데이터베이스가 UTF-8로되어 있어도 충분하지 않았습니다! 데이터베이스와 열 테이블의 데이터 정렬 유형을 모두 변경해야했습니다.

지원해 주셔서 감사합니다.

알렉스

관련 문제