0

我对多语言数据库有以下问题。我需要将每种语言的属性文件存储到数据库中。我在实体中使用了 CLOB 数据类型和 String 字段,我在 @PrePersist 和 @PreUpdate 上将 java.util.Properties 转换为 String,在 @PostLoad 中我将它从字符串转回属性。这对于德语本地化效果很好,但不适用于法语。可能值得一提的是,我到处都在使用 ISO8859-1 编码

@Lob
// length is there only for hypersonic sql (junit tests), otherwise clob(255) is generated
@Column(name = "PROPERTIES_BLOB", length = 65536, nullable = false)
private String blob;

@Transient
private Properties properties;

@PostLoad
public void postLoad() throws IOException
{
    try (StringReader reader = new StringReader(blob))
    {
        this.properties = new Properties();
        this.properties.load(reader);
    }
}

我试过转义特殊的法语字符,然后从我的角度来看,clob 很好。但是,当我将数据加载到实体时,JPA 确实取消了字符转义并搞砸了法语字符。

我通过将我的 clob 转换为 blob 并将实体中的列转换为 byte[] 数组来解决了这个问题,这使我能够解决这个问题并使用 Properties.load(InputStream stream) 方法进行转义,即使对于法语也可以人物

然而,我的问题是如何通过将 clob 保存在数据库中来管理它(它包含的内容清晰可见,等等)。在将数据从 clob 写入字符串时,我需要强制 JPA 或休眠不要转义字符。它有一些配置属性吗?

4

1 回答 1

1

尝试将编码添加到数据源 url,如

jdbc:mysql://127.0.0.1:3306/databaseName?characterEncoding=ISO8859-1

顺便说一句,最佳实践是使用UTF-8编码。考虑将您的应用程序转换为 UTF-8

于 2017-05-31T11:47:01.783 回答