@mykostyaa
Начинающий програмист

Проблема с кодировкой с postgresql в IDEA, как решить?

У меня есть два скрипта, первый создает таблицы, второй заполняет таблицы данными
CREATE SCHEMA IF NOT EXISTS sausageShop;

CREATE TABLE IF NOT EXISTS sausageShop.category
(
    id    serial PRIMARY KEY ,
    title VARCHAR NOT NULL
);

CREATE TABLE IF NOT EXISTS sausageShop.product
(
    id          serial PRIMARY KEY ,
    nameProduct VARCHAR(45)      NOT NULL,
    price       DOUBLE PRECISION NOT NULL,
    composition VARCHAR,
    description VARCHAR,
    rating      DOUBLE PRECISION
);

INSERT INTO sausageShop.product (nameProduct, price, description, composition, rating)
VALUES ('Сосиски', 100, 'Небольшие вкусные штучки', '100% курица', 0);
INSERT INTO sausageShop.product (nameProduct, price, description, composition, rating)
VALUES ('Сервелат', 500, 'Классная копченая колбаска', 'Кто-то умер, чтобы попасть туда', 0);
INSERT INTO sausageShop.product (nameProduct, price, description, composition, rating)
VALUES ('Вяленое мясо', 800, 'Оно вкусное', '200% вяленого мяса', 0);
INSERT INTO sausageShop.product (nameProduct, price, description, composition, rating)
VALUES ('Копченное мясо', 683, 'Оно стоит 683 рубля', 'Его ингридиенты стоили 683 рубля', 0);

INSERT INTO sausageShop.category (title)
VALUES ('колбаски');
INSERT INTO sausageShop.category (title)
VALUES ('мяско');

Далле с помощью JDBC драйвера подключаюсь к postgresql и выполняю скрипты
private static void createDbTables() throws SQLException, FileNotFoundException {
        Connection connection = getDBConnection();
        ScriptRunner sr = new ScriptRunner(connection);
        System.out.println("Инициализируем базу данных PostgreSQL...");
        Reader reader = new BufferedReader(new FileReader
                ("C:\\Users\\Sakura\\IdeaProjects\\SausageShop\\src\\main\\resources\\sqlScripts\\create_tables.sql"));
        try {
            sr.runScript(reader);
        } catch (RuntimeSqlException e){
            System.out.println("нету бд");
            return;
        }
        System.out.println("База данных успешно проинициализированна!");
    }

    private static void generateContentInDbTable() throws FileNotFoundException {
        Connection connection = getDBConnection();
        ScriptRunner sr = new ScriptRunner(connection);
        System.out.println("Заполняем таблицы...");
        Reader reader = new BufferedReader(new FileReader
                ("C:\\Users\\Sakura\\IdeaProjects\\SausageShop\\src\\main\\resources\\sqlScripts\\generate_content.sql"));
        try{
            sr.runScript(reader);
        } catch (RuntimeSqlException e){
            System.out.println("нету бд");
            return;
        }
        System.out.println("Таблицы заполнины исходными данными!");
    }

    private static Connection getDBConnection() {
        Connection connection = null;
        try {
            Class.forName("org.postgresql.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println(e.getMessage());
        }
        try {
            connection = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres?useUnicode=yes&characterEncoding=UTF-8", "postgres", "postgres");
            return connection;
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        return connection;
    }

Но потом что-то происходит, то ли с кодировкой в идее то ли еще что-то и выходит это:
6047999939d80756469013.jpeg
В таблицах такие же данные, но если напрямую через консоль postgresql выполнять те же скрипты то данные не ломаются
Может кто знает как это можно пофиксить
  • Вопрос задан
  • 1305 просмотров
Пригласить эксперта
Ответы на вопрос 1
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день!
Проверьте кодировку используюмую в БД.
Также попробуйте к урл для подключения к Бд добавить ?useUnicode=yes&characterEncoding=UTF-8
Например,
jdbc:postgresql://localhost:5432/example_db?useUnicode=yes&characterEncoding=UTF-8
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы