Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hibernate 4和MySQL将blob读取为字符串时编码错误_Java_Mysql_Hibernate_Blob - Fatal编程技术网

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;
}

不幸的是,它没有帮助不幸的是,它没有帮助