Newsgroup: it.comp.java
Titolo: jdbc e mysql, problema con i caratteri speciali

In queste poche righe di codice, cerco di scrivere una stringa in un
campo di una tabella mysql:
import java.sql.*;
public class mysqlExample {
   public static void main(String[] args) {
      try {
         Class.forName("com.mysql.jdbc.Driver").newInstance();
         Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/database", "utente", "password");
         Statement stmt = conn.createStatement();
         String sql = "INSERT INTO tabella (testo) VALUES ('אטלשע')";
         stmt.executeUpdate(sql);
         ResultSet rs = stmt.executeQuery("SELECT * FROM tabella");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}
Quando dal prompt di mysql provo a visualizzare il contenuto della
tabella:
mysql> select * from tabella;
+----+-------------------+
| id | testo             |
+----+-------------------+
|  1 | ׃‎&#8215;¨             |
+----+-------------------+
quello che ottengo sono dei strani simboli, e non i miei caratteri
accentati.
So che Java usa Unicode per codificare le stringhe, quello che non so
ט come risolvere il problema.
Del resto, se eseguio il seguente frammento di codice:
...
String text = "אטלעש";
System.out.println(text);
...
ancora una volta non vengono visualizzati i caratteri accentati, ma i
soliti strani simboli.
Qualche suggerimento?
Grazie in anticipo,
Mirco

 Mirco
prova ad aggiungere queste righe
     byte[] bb = sql.getBytes();
     String stt = new String(bb,"ISO-8859-1");
     stmt.executeUpdate(stt);
al posto di
     stmt.executeUpdate(sql);
io cosм ho risolto.
mysql usa il set di caratteri iso-8859-1 di default , quindi probabilmente
la stringa che si deve passare al driver deve essere in quel formato (e non
in unicode)
per lo meno, questa и la spiegazionne che io mi sono dato.
fammi sapere se funziona.

 Qualche suggerimento?
Che sistema operativo usi ?
Impostazioni (LOCALE, charset, etc ) ?

 ha scritto nel messaggio
news:2b08201e.03052...@posting.google.com...

ho provato il tuo codice leggermente modificato, funziona perfettamente
import java.sql.*;
public class mysqlExample {
   public static void main(String[] args) {
      try {
         Class.forName("org.gjt.mm.mysql.Driver").newInstance();
         Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/primo", "root", "");
         Statement stmt = conn.createStatement();
         String sql = "INSERT INTO cd (gruppo) VALUES ('אטלשע´?')";
         stmt.executeUpdate(sql);
         ResultSet rs = stmt.executeQuery("SELECT * FROM cd");
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}
ho cambiato solo il driver , perchט uso ancora il buon vecchio mm.mysql.
il discorso della codifica iso-8859, che ti facevo precedentemente, a me
serviva probabilmente perchט andavo a prendermi l'sql da una textarea.
fa attenzione che con w2000 e xp le versioni precedenti al j2dk1.4.1_02
hanno un bug che crea problemi di visualizzazione per i caratteri ascii >
127 in tutti i textcomponent.
quindi, in questo caso, se vai a controllare il risultato dell'insert
stampandolo su una textarea, ti verrא senz'altro sballato.
fra l'altro noto ora che controlli il risultato dal prompt di dos, ma dos li
visualizza i caratteri ascii > 127 ?
per sicurezza, non si sa mai, prova a vederti la tabella usando mysqlfront o
dbtools o roba del genere, magari viene fuori che andava tutto bene.
ciao

...


Hai ragione tu, l'unico problema era il command prompt che non visualizzava
i caratteri in modo corretto.
Infatti quando facevo gli inserimenti usando Tomcat/Cocoon tutto funzionava
bene.
... il classico caso in cui ti senti un pò idiota ...
Naturalmente grazie mille per la pazienza dimostrata : )