Как решить проблему с отображением некорректных символов при извлечении данных из таблицы MySQL?

Всем доброго дня/вечера/утра/денечка! Программа максимум: Приконнектиться к таблице в базе данных, вытащить строку данных из SQL Таблицы и передать ее в метод, который отправляет данные в WooCommerce REST API.

Проблема: Подключаюсь к базе данных, выполняю запрос, получаю "крякозябры" в консоли и соответственно кривая отправка данных в API

Пример кода извлечения данных ниже:

public class DatabaseConnector {
private static final String URL = "jdbc:mysql://DATABASE_IP:3306/default_db?useUnicode=true&characterEncoding=UTF-8"; // тут нейросетка посоветовала указать еще явную кодировку
private static final String USER = "USER";
private static final String PASSWORD = "PASSWORD";

public static void fetchAndProcessData() {
    String query = "SELECT id, name, category " +
            "FROM default_db.Promelec_Products " +
            "WHERE REGEXP_REPLACE(name, '[[:space:]]', '') = name " +
            "AND name NOT LIKE '% %'";

    try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
         Statement stmt = conn.createStatement();
         ResultSet rs = stmt.executeQuery(query)) {

        while (rs.next()) { //тут начинаются танцы с бубном
            String name = new String(rs.getBytes("name"), StandardCharsets.UTF_8);
            String category = new String(rs.getBytes("category"), StandardCharsets.UTF_8);

            System.out.println(name + " " + category);
            ProductUploader.upload(name, category); //Отправляет данные в REST 
            
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }
}

}

Вывод в консоли (В данном случае name + category) русских букв:

140��1201 140��1201, ������������ ��������� ���������������

А в следствие и кривая отправка данных в API

Сама таблица в БД настроена на: Charset: utf8mb4 Collation:utf8mb4_unicode_ci Оба столбца - это VARCHAR

Метод отправки 100% рабочий, так как инициализированные Строки корректно отправляются в API

А теперь уважаемые знатоки, ВНИМАНИЕ ВООПРОС!!

Как правильно извлечь данные из БД?

p.s. CSV - пробовал, та же петрушка настройка JVM - более менее рабочий метод, но не все буквы нормально декодятся

Вывод show variables like 'char%';

  • Variable_name, Value
  • 'character_set_client', 'utf8mb4'
  • 'character_set_connection', 'utf8mb4'
  • 'character_set_database','utf8mb4'
  • 'character_set_filesystem', 'binary'
  • 'character_set_results', 'utf8mb4'
  • 'character_set_server', 'utf8mb4'
  • 'character_set_system', 'utf8'
  • 'character_sets_dir','/usr/share/mysql/charsets/'

Ответы (2 шт):

Автор решения: talex

rs.getBytes("name") делать не надо. Достаточно rs.getString().

→ Ссылка
Автор решения: Андрей Чуешков

Смог решить эту проблему переписав все со Spring'ом (по другому не умею и не стал думать как)

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'mysql:mysql-connector-java:8.0.28'

Использовал эти зависимости

Описал класс сущности @Entity для взаимодействия с таблицей

Взаимодействовал через интерфейс

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {}

Далее сформировал List и затем дергал данные из List циклом for, как итог никаких проблем с кодировками при извлечении данных из MySQL и корректная отправка в REST API WooCommerce

Так же прикладываю настройки которые необходимо указать в application.properties

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://УказатьHostIp:3306/default_db
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
spring.jpa.show-sql=false

С данной конфигурацией как минимум все запускается, как максимум дам знать позже

→ Ссылка