Java 使用Hibernate 4和MySQL将blob读取为字符串时编码错误
我有一个具有以下字段的实体:Java 使用Hibernate 4和MySQL将blob读取为字符串时编码错误,java,mysql,hibernate,blob,Java,Mysql,Hibernate,Blob,我有一个具有以下字段的实体: @Column String shortVarcharField; @Column(columnDefinition = "BLOB", length = 65534) private String veryLongStringInBlob; 当我将这个实体存储到数据库并使用MySQL CLI查看它时,我在那个里看到了正常的UTF。但当我用Hibrnate读它时,它读的是��而不是普通的unicode 那么,我应该如何将实体更改为通常将长字符串映射到blob?在
@Column
String shortVarcharField;
@Column(columnDefinition = "BLOB", length = 65534)
private String veryLongStringInBlob;
当我将这个实体存储到数据库并使用MySQL CLI查看它时,我在那个里看到了正常的UTF。但当我用Hibrnate读它时,它读的是��代码>而不是普通的unicode
那么,我应该如何将实体更改为通常将长字符串映射到blob?在验证之前在实体中使用@Lob
注释@Lob
用于blob和clob的技巧(使用字符串作为类型)。您可以参考下面的参考代码
@Column( name = "FILEIMAGE" )
@Lob(type = LobType.BLOB)
private byte[] fileimage;
您也可以使用以下代码:
@Column(name="content")
@Lob
private Blob content;
在验证之前,在实体中使用@Lob
注释@Lob
用于blob和clob的技巧(使用字符串作为类型)。您可以参考下面的参考代码
@Column( name = "FILEIMAGE" )
@Lob(type = LobType.BLOB)
private byte[] fileimage;
您也可以使用以下代码:
@Column(name="content")
@Lob
private Blob content;
解决方案非常简单:
@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();
}
解决方案非常简单:
@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();
}
您将需要以字节[]的形式读取该BLOB列,并使用该字节[]的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;
}
您将需要以字节[]的形式读取该BLOB列,并使用该字节[]的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;
}
不幸的是,它没有帮助不幸的是,它没有帮助