Spring boot2,Mysql UTF-8编码不起作用

时间:2018-10-18 03:36:26

标签: spring-boot spring-data-jpa

我在后端使用的是spring boot 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 =是在上面的网址中

方法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;

方法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;
    }
}

2 个答案:

答案 0 :(得分:0)

这是一个很老的问题,所以我可能只是出于历史原因而发布解决方案。

1)数据库排序规则和表的字段排序规则应为utf8mb4 _...,例如utf8mb4_unicode_ci。

2)Application.properties连接字符串应包含: useUnicode=true&characterEncoding=UTF-8

就像您的“方式1”中一样。就是这样。

答案 1 :(得分:0)

默认情况下,MySQL表CHARSET位于latin1中。为了存储UTF-8字符,我们需要将表编码为UTF-8 CHARSET。

例如。 ALTER TABLE dbName.tableName MODIFY COLUMN columName longtext CHARACTER SET utf8 COLLATE utf8_general_ci;