Как указать кодировку символов для h2 в скриптах базы данных памяти? - PullRequest
2 голосов
/ 15 апреля 2019

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

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

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

(обратите внимание на символ "é" в "Réclamation")

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

Но происходит сбой со следующей ошибкой:

org.junit.ComparisonFailure: ожидается: R [é], но было: 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 в своем приложении

1 Ответ

1 голос
/ 25 июня 2019

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

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

...