当文本包含多种语言时,带有blob转换blob的JPA本机查询会导致问号

时间:2016-06-15 06:27:03

标签: java mysql jpa

当文本包含多种语言(如下所示)时,带有blob转换blob的JPA本机查询会导致问号。 "描述" :" ??????"

尝试编码如下。但仍然是同样的问题。 String xmlFile = new String(xmlBytesArray," UTF-8");

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我认为您的默认系统编码不是UTF-8 - 您可以通过设置系统属性来为您的java进程更改此内容:

-Dfile.encoding=UTF-8

另一种可能性是您必须将编码添加到DB-Connection-String中 对于MySQL,这将是

jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8

答案 1 :(得分:0)

最后我们发现问题不在于JPA本机查询,而在于JAXB解组。

从查询中读取blob作为字符串后,我们要使用blob中的转换字符串直接解组XML,而不是直接传递字节数组。

以下是问题的解决方法。

public static Object unMarshaller(JAXBContext jc,byte[] byteArr) throws JAXBException{
        Unmarshaller u = jc.createUnmarshaller();
        ByteArrayInputStream bais = new ByteArrayInputStream(byteArr);
        u.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());
        Source input = new StreamSource(bais);
        return u.unmarshal(input);
    }