我在后端使用的是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;
}
}
答案 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;