jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
De lo contrario, el controlador MySQL JDBC utilizará la codificación predeterminada de la plataforma para convertir los caracteres en 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 también admita/use UTF-8. De lo contrario, también se convertirán en signos de interrogación. La forma de solucionarlo depende de cómo/dónde estés mostrando/escribiendo esos caracteres.
Véase también:
Por cierto, no necesitas el SET NAMES
Consulta aquí.