【发布时间】:2020-11-17 16:11:24
【问题描述】:
我有一个使用 Spring Boot 1.52 版本的 java web 应用程序,在 application.properties 文件中,我有这个配置来连接到 postgresql。
spring.datasource.url=jdbc:postgresql://localhost:5432/test_utf8
我有一个模型类,它代表 Hibernate 的一个表:
@Entity
@Table(name = "coverage")
@Inheritance(strategy = InheritanceType.JOINED)
public class Coverage implements Serializable {
@Column(name = "metadata")
@Lob
private String metadata;
}
并且这个服务类将 Coverage 对象保存到数据库中。
@Transactional
public interface CoverageRepository extends CrudRepository<Coverage, String> {
}
我使用这个存储库服务将 Coverage 对象保存到数据库:
@Service
@Transactional
public class CoverageRepositoryService {
@Autowired
private CoverageRepository coverageRepository;
public void save(Coverage coverage) {
coverageRepository.save(coverage);
}
}
一切都很好,除非元数据包含非 ascii 字符 µ。我检查了postgresql数据库,它将像这样\265保存,在Spring Boot Web应用程序中,它将显示为�字符。
Postgresql:
select encode(data, 'escape') from coverage c, pg_largeobject lo
where c.metadata::int=lo.loid
postgresql 中的表设置为 UTF-8:
psql (9.2.24)
Type "help" for help.
test_utf8=# SHOW SERVER_ENCODING;
server_encoding
-----------------
UTF8
(1 row)
有谁知道,从 Spring Boot / Hibernate 将这个非 ascii 字符正确保存到 postgresql/ 会有什么问题
更新 1
如果我从 @Lob 中删除并更改为
@Column(name = "metadata", columnDefinition = "text")
private String metadata;
然后就可以在postgresql中很好的存储µ字符了
所以这个@Lob从Hibernate到Postgresql肯定有问题。
【问题讨论】:
标签: java spring postgresql spring-boot hibernate