使用Hibernate 4和MySQL将blob读取为字符串时编码错误

时间:2017-07-12 16:17:43

标签: java mysql hibernate blob

我有一个带有字段的实体:

@Column
String shortVarcharField;

@Column(columnDefinition = "BLOB", length = 65534)
private String veryLongStringInBlob;

当我将此实体存储到数据库并使用MySQL-CLI进行观察时,我在那里看到了正常的UTF。但是当我用Hibrnate读取它时,它会读取��而不是正常的unicode。

那么,我应该如何将我的实体更改为通常将长字符串映射到blob?

3 个答案:

答案 0 :(得分:0)

在可靠之前在实体中使用@Lob注释。 @Lob用于blob和clob的技巧(使用String作为类型)。你可以参考下面的参考代码。

@Column( name = "FILEIMAGE" )
@Lob(type = LobType.BLOB)
private byte[] fileimage;

您也可以使用以下代码:

@Column(name="content")
@Lob
private Blob content;

答案 1 :(得分:0)

解决方案非常简单:

@Column
String shortVarcharField;

@Column(columnDefinition = "BLOB", length = 65534)
private byte[] veryLongStringInBlob;

public String getVeryLongStringInBlob(){
  return new String(veryLongStringInBlob);
}

public void setVeryLongStringInBlob(String value){
  this.setVeryLongStringInBlob = value.getBytes();
}

答案 2 :(得分:0)

您需要将该BLOB列读取为byte []并使用该字节[]中的UTF-8字符集构造一个String,类似于下面的模型

@Lob 
@Basic(fetch = FetchType.EAGER) 
@Column(name="YOURCOLUMN", columnDefinition="BLOB", nullable = true)
private byte[] info;


public String getInfo() {
    try {
        return (new String(info,"UTF-8"));
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        return "";
    }
}

public void setInfo(byte[] info) {
    this.info = info;
}