Spring boot2, кодировка Mysql UTF-8 не работает - PullRequest
0 голосов
/ 18 октября 2018

Я использую весеннюю загрузку 2 jpa, mysql db на заднем конце, у меня есть некоторые поля таблицы, которые требуют сохранения специальных символов.Я перепробовал много способов сделать это, но это просто не произошло,

это должно быть довольно просто, я мог видеть, как другие используют это, но по некоторым причинам это не работает для меня.

Значение Würtemberg сохраняется как W�rtemberg

. Любая помощь будет признательна.

Ниже приведены способы, которые я пытался, но не смог заставить его работать,

вapplication.properties,

Путь 1: -

spring.datasource.url=jdbc:mysql://${global.database.host}:${global.database.port}/${global.database.schema}?useSSL=false&useUnicode=true&characterEncoding=UTF-8

путь 2 useUnicode = да в вышеупомянутом URL

путь 3

spring.jpa.properties.hibernate.connection.CharSet=UTF-8
spring.jpa.properties.hibernate.connection.characterEncoding=UTF-8
spring.jpa.properties.hibernate.connection.useUnicode=true

путь 4

spring.datasource.tomcat.connection-properties=useUnicode=true;characterEncoding=utf-8;

way 5

spring.datasource.url= jdbc:mysql://localhost:3306/database?useUnicode=yes&characterEncoding=UTF-8
connection.useUnicode=true
connection.characterEncoding=utf-8
hibernate.connection.useUnicode=true
hibernate.connection.characterEncoding=UTF-8
spring.datasource.sqlScriptEncoding=UTF-8

Но не повезло,

Любая идея, почему она не работает,

Я использую DatasourceConfiguration, как показано ниже,

@Slf4j
@Setter
@Configuration
public class DataSourceConfiguration {

    @Value("${spring.datasource.tomcat.test-on-borrow}")
    private boolean testOnBorrow;

    @Value("${spring.datasource.tomcat.validation-query}")
    private String validationQuery;

    @Value("${global.database.host}")
    private String dbHost;

    @Value("${global.database.port}")
    private Integer dbPort;


    @Bean
    @Primary
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean
    @Primary
    public DataSource dataSource() throws DockerException, InterruptedException {

        if (StringUtils.isEmpty(dbHost) || dbPort == null) {
            // some log
        } else {
            ServiceProbe probe = new ServiceProbe(2, TimeUnit.MINUTES);
            try {
                probe.probe(new IsTcpConnectionUp(dbHost, dbPort));
            } catch (ServiceDownException e) {
                throw new RuntimeException(e);
            }
        }

        DataSourceProperties dsp = dataSourceProperties();
        DataSourceBuilder dataSourceBuilder = dsp.initializeDataSourceBuilder();
        DataSource ds = dataSourceBuilder.build();


        if (ds instanceof org.apache.tomcat.jdbc.pool.DataSource) {
            ((org.apache.tomcat.jdbc.pool.DataSource) ds).setTestOnBorrow(testOnBorrow);
            ((org.apache.tomcat.jdbc.pool.DataSource) ds).setValidationQuery(validationQuery);
        } else {
            // some logs
        }
        return ds;
    }
}

1 Ответ

0 голосов
/ 10 апреля 2019

Это довольно старый вопрос, поэтому я, вероятно, выложу решение ради истории.

1) Параметры сортировки базы данных и полей таблицы должны быть utf8mb4 _..., например, utf8mb4_unicode_ci.

2) Строка подключения Application.properties должна содержать: useUnicode=true&characterEncoding=UTF-8

Так же, как в вашем «Пути 1».Вот и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...