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