Съгласно документацията на MySQL JDBC драйвер трябва да зададете и кодирането на символи в URL адреса на JDBC връзка. Ето един пример:
jdbc:mysql://localhost:3306/db_name?useUnicode=yes&characterEncoding=UTF-8
В противен случай MySQL JDBC драйверът ще използва кодирането по подразбиране на платформата, за да преобразува знаците в байтове, преди да изпрати по мрежата, което във вашия случай очевидно не е UTF-8. След това всички непокрити знаци ще бъдат заменени с въпросителни.
Също така, когато извличате данните, трябва да се уверите, че конзолата/файлът, в който показвате/записвате знаците, също поддържа/използва UTF-8. В противен случай те също ще станат въпросителни. Как да поправите това зависи от това как/къде показвате/записвате тези знаци.
Вижте също:
Между другото, не се нуждаете от SET NAMES
запитване тук.