Spring boot SpringBoot2,Mysql UTF-8编码不工作
我在后端使用spring boot 2 jpa、mysql db,我有一些需要保存特殊字符的表字段。我尝试了很多方法,但都没有成功 它应该非常直接,我可以看到其他人是如何使用它,但出于某种原因,它不适合我 值Spring boot SpringBoot2,Mysql UTF-8编码不工作,spring-boot,spring-data-jpa,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}:${gl
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在上述url中使用Unicode=yes
方式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
但是运气不好
知道它为什么不起作用吗
我使用的数据源配置如下所示
@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) 数据库排序规则和表的字段排序规则应为utf8mb4_…,例如utf8mb4_unicode_ci 2) Application.properties连接字符串应包含:
useUnicode=true&characterEncoding=UTF-8
就像你的“方式1”。就是这样。默认情况下,MySQL表字符集是拉丁文1。为了存储UTF-8字符,我们需要将表编码为UTF-8字符集
比如说<代码>更改表dbName.tableName修改列列名称长文本字符集utf8 COLLATE utf8\U general\U ci代码>检查mysql数据库排序规则。设置为utf8_bin@sajib我试过了,但没有成功:(谢谢你的回复
@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;
}
}