Zgodnie z dokumentacją sterownika MySQL JDBC musisz również ustawić kodowanie znaków w adresie URL połączenia JDBC. Oto przykład:
jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
W przeciwnym razie sterownik MySQL JDBC użyje domyślnego kodowania platformy, aby przekonwertować znaki na bajty przed wysłaniem przez sieć, co w twoim przypadku najwyraźniej nie jest UTF-8. Wszystkie odkryte postacie zostaną następnie zastąpione znakami zapytania.
Ponadto, podczas pobierania danych, musisz upewnić się, że konsola/plik, w którym wyświetlasz/piszesz znaki również obsługuje/używa UTF-8. W przeciwnym razie staną się również znakami zapytania. Jak to naprawić, zależy od tego, jak/gdzie wyświetlasz/piszesz te znaki.
Zobacz też:
Przy okazji, nie potrzebujesz SET NAMES
zapytanie tutaj.