problema con utf8 en java

Tengo la siguiente tabla:

create table test ( fname char(20) character set utf8 collate utf8_turkish_ci, id int primary key ); 

Estoy insertando datos de la siguiente manera:

 resultSet.executeQuery("set namee utf8"); preparedStatement = connection.prepareStatement("insert into test(fname) values(?)"); preparedStatement.setstring(1,"alis"); preparedStatement.executeUpdate(); 

Pero cuando recupero datos se parecen a ????? .

¿Qué es un problema y cómo puedo resolverlo?

De acuerdo con la documentación del controlador JDBC de MySQL, también debe configurar la encoding de caracteres en la URL de conexión de JDBC. Aquí hay un ejemplo:

 jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8 

De lo contrario, el controlador JDBC de MySQL usará la encoding predeterminada de la plataforma para convertir los caracteres a bytes antes de enviarlos a través de la red, que en su caso aparentemente no es UTF-8. Todos los caracteres descubiertos serán reemplazados por signos de interrogación.

Además, al recuperar los datos, debe asegurarse de que la consola / archivo en el que está mostrando / escribiendo los caracteres para que también admita / use UTF-8. De lo contrario, también se convertirán en signos de interrogación. Cómo solucionarlo depende de cómo / dónde estés mostrando / escribiendo esos personajes.

Ver también:

  • Unicode – ¿Cómo conseguir los personajes correctos?

Por cierto, no necesita la consulta SET NAMES aquí.