Gemäß der MySQL JDBC-Treiberdokumentation Sie müssen die Zeichencodierung auch in der JDBC-Verbindungs-URL festlegen. Hier ist ein Beispiel:
jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
Andernfalls verwendet der MySQL-JDBC-Treiber die Standardcodierung der Plattform, um die Zeichen vor dem Senden über das Netzwerk in Bytes zu konvertieren, was in Ihrem Fall anscheinend nicht UTF-8 ist. Alle nicht abgedeckten Zeichen werden dann durch Fragezeichen ersetzt.
Außerdem müssen Sie beim Abrufen der Daten sicherstellen, dass die Konsole/Datei, in der Sie die Zeichen anzeigen/schreiben, auch UTF-8 unterstützt/verwendet. Andernfalls werden sie ebenfalls zu Fragezeichen. Wie Sie das beheben können, hängt davon ab, wie/wo Sie diese Zeichen anzeigen/schreiben.
Siehe auch:
Übrigens brauchst du die SET NAMES
nicht hier abfragen.