我有一个带有字段的实体:
@Column
String shortVarcharField;
@Column(columnDefinition = "BLOB", length = 65534)
private String veryLongStringInBlob;
当我将此实体存储到数据库并使用MySQL-CLI进行观察时,我在那里看到了正常的UTF。但是当我用Hibrnate读取它时,它会读取��
而不是正常的unicode。
那么,我应该如何将我的实体更改为通常将长字符串映射到blob?
答案 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;
}