我有一个包含字段的实体:
@Column
String shortVarcharField;
@Column(columnDefinition = "BLOB", length = 65534)
private String veryLongStringInBlob;当我将这个实体存储到数据库并使用MySQL-CLI查看它时,我在那里看到了普通UTF。但当我用Hibrnate读取它时,它读取的是��而不是普通的unicode。
那么,我应该如何更改我的实体以正常地将长字符串映射到blob呢?
发布于 2017-07-13 00:33:56
在veriable之前在实体中使用@Lob注释。@Lob用于blob和clob的技巧(使用字符串作为类型)。你可以参考下面的参考代码。
@Column( name = "FILEIMAGE" )
@Lob(type = LobType.BLOB)
private byte[] fileimage;你也可以使用下面的代码:
@Column(name="content")
@Lob
private Blob content;发布于 2017-07-13 21:11:45
解决方案非常简单:
@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();
}发布于 2018-01-17 21:36:44
您将需要将该BLOB列作为byte[]读取,并使用该byte[]中的UTF-8字符集构造一个字符串,类似于您的模型中的以下内容
@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;
}https://stackoverflow.com/questions/45062956
复制相似问题