Как указать кодировку символов для h2 в скриптах базы данных памяти?

У меня проблемы с кодировкой символов в моем тестовом классе JPA.

В моем h2 в базе данных памяти у меня есть этот запрос вставки:

INSERT INTO MYTABLE (ID,FIELD1,FIELD2) VALUES (100,'ABC','Réclamation');

(обратите внимание на символ «é» в «Заявлении»)

В моем тесте JUnit я пытаюсь утверждать, что значение столбца FIELD2 равно "Réclamation" (что, как вы можете видеть)

Но это не удается со следующей ошибкой:

org.junit.ComparisonFailure: ожидается: R [é] clamation, но было: R [�] clamation

Интересно, есть ли способ указать кодировку символов в файле persistence.xml (возможно? или где-то еще)

Вот мой тестовый файл persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence
    version="2.1"
    xmlns="http://xmlns.jcp.org/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">

    <persistence-unit name="myTestPU">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>com.myproject.myclass1</class>
        <class>com.myproject.myclass2</class>
        <properties>
            <property
                name="javax.persistence.schema-generation.database.action"
                value="none" />
            <property
                name="javax.persistence.sharedCache.mode"
                value="ENABLE_SELECTIVE" />
            <property
                name="javax.persistence.jdbc.url"
                value="jdbc:h2:mem:test;INIT=RUNSCRIPT FROM 'classpath:ddl/schema.sql'\;RUNSCRIPT FROM 'classpath:ddl/data.sql'" />
            <property
                name="javax.persistence.jdbc.driver"
                value="org.h2.Driver" />
            <property
                name="hibernate.dialect"
                value="org.hibernate.dialect.H2Dialect" />
            <property
                name="hibernate.show_sql"
                value="true" />
            <property
                name="hibernate.format_sql"
                value="true" />
        </properties>
    </persistence-unit>
</persistence>

Я уже пробовал эти решения:

  • добавление следующих свойств в тестовый файл persistence.xml:

    <property
        name="hibernate.connection.characterEncoding"
        value="utf8" />
    <property
        name="hibernate.connection.useUnicode"
        value="true" />
    <property
        name="hibernate.connection.charSet"
        value="UTF-8" />
    
  • добавление ?useUnicode=yes&amp;characterEncoding=UTF-8 в свой URL-адрес

Ни один из них у меня не работал ...

NB: я не использую Spring framework в своем приложении


person Sinda MOKADDEM    schedule 15.04.2019    source источник
comment
Есть идеи решить мою проблему с кодировкой?   -  person Sinda MOKADDEM    schedule 17.04.2019


Ответы (1)


У меня были запросы на вставку в файл import.sql, и эти значения были неправильно закодированы. Добавление свойства <property name="hibernate.hbm2ddl.charset_name" value="UTF-8" /> исправило это для меня.

Если у вас более старая версия спящего режима (по-видимому, до 5.2.3), возможно, попробуйте другие решения в этом потоке: Hibernate / JPA import.sql символы utf8 повреждены

person hackbällchen    schedule 25.06.2019