Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Problema acentos java y mysql

Buenos días,

Quisiera haceros una consultilla a ver si alguien me puede ayudar...

El tema es que en MySQL tengo unos datos con acentos, pero cuando los recojo en java (con Eclipse), me hace la siguiente traducción:

á ->
é -> ‚
í -> ¡
ó -> ¢
ú -> £
....

Datos de interés, en Eclipse he configurado para que me coja por defecto todas las página como UTF-8

En MySQL he seteado los siguientes parámetros:
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem BINARY
character_set_results utf8
character_set_server utf8
character_set_system utf8

Muchas gracias

;)

febrero 15, 2013 | Unregistered CommenterEndika

Buenas,
Puedes mostrarnos como creas la conexion con MySQL?

Un saludo,

febrero 15, 2013 | Unregistered CommenterUnoPorAhi

Buenas, muchas gracias por el interés

public Oferta getOferta(int idOferta) throws ClassNotFoundException, SQLException{
try
{
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e)
{
e.printStackTrace();
}
Connection c=DriverManager.getConnection(server,user,password);
Statement st=c.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs=st.executeQuery("SELECT idoferta,nombre,contenido,rutaimagen FROM OFERTA WHERE idoferta="+idOferta);
rs.next();
Oferta oferta=new Oferta(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getString(4));
c.close();

return oferta;
}

febrero 15, 2013 | Unregistered CommenterEndika

Buenas,
En el DriverManager.getConnection(server,user,password); entiendo que en la variable server tienes algo como jdbc:mysql:///midb no?

Prueba a poner esto: jdbc:mysql:///midb?useUnicode=true&characterEncoding=utf-8

Un saludo,

febrero 15, 2013 | Unregistered CommenterUnoPorAhi

Muchas gracias, pero no sigue sin sacar bien los acentos

febrero 15, 2013 | Unregistered CommenterEndika

me sigue sin sacar bien* que me he equivocado al escribir jejeje

febrero 15, 2013 | Unregistered CommenterEndika

Ummm, es raro... Como haces para representar los caracteres/texto?
Es decir, lo haces con un System.out, o depurando, o mostrandolos en una JSP....

febrero 15, 2013 | Unregistered CommenterUnoPorAhi

System.out.println

febrero 15, 2013 | Unregistered CommenterEndika

Ahhh ok. El problema esta ahi entonces! El encoding esta bien, pero es la salida standar Java la que no soporta la codificacion.

A que si depuras la variables en eclipse si que se ven bien los acentos?

Si tu programa tienes que escribir en consola deberias crearte un printwriter especifico :

PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
out.println(“some-utf8-string”);

Lo mejor es que te hagas una funcioncilla que encapsule esto.

Si trabajas con la consola de eclipse puede que necesites anadir esto -Dfile.encoding=UTF-8 en el eclipse.ini para que funcione.

Algunas referencias:
http://poeticcode.wordpress.com/2009/01/19/systemout-and-utf8/
http://paranoid-engineering.blogspot.de/2008/05/getting-unicode-output-in-eclipse.html

Un saludo

febrero 15, 2013 | Unregistered CommenterUnoPorAhi

Buenas,

Si hago un debug, en la variable oferta me salen mal los acentos. Así que no puede ser relativo a la consola :S

Me estoy volviendo loco con esta tontería jeje

febrero 15, 2013 | Unregistered CommenterEndika

Buenas,
Pues mucho sentido no tiene. Me acabo de hacer ahora mismo un ejemplo on the fly y me funciona perfectamente con acentos y todo:


public class Test {

private static String getStringFromMySQL() throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
Connection c = DriverManager.getConnection("jdbc:mysql:///xxxx?useUnicode=true&characterEncoding=utf-8", "root", "root");
Statement st = c.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = st.executeQuery("select xxxxxx from xxxxxx where xxxxxx=1");
rs.first();
String dato = rs.getString(1);
return dato;
}
public static void main(String[] args) throws ClassNotFoundException {
String data = null;
try {
data = getStringFromMySQL();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(data);
}

}

Tienes esto en tu my.ini verdad?:
default-character-set=utf8
character-set-server = utf8
collation-server = utf8_general_ci

Si eso tampoco es, te paso un link de configuration utf-8 para mysql muy completo:
http://cameronyule.com/2008/07/configuring-mysql-to-use-utf-8/

Suerte

febrero 15, 2013 | Unregistered CommenterUnoPorAhi