首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Hibernate 4和MySQL将blob读取为字符串时编码错误

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

Stack Overflow用户
提问于 2017-07-13 00:17:43
回答 3查看 1.1K关注 0票数 1

我有一个包含字段的实体:

代码语言:javascript
复制
@Column
String shortVarcharField;

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

当我将这个实体存储到数据库并使用MySQL-CLI查看它时,我在那里看到了普通UTF。但当我用Hibrnate读取它时,它读取的是��而不是普通的unicode。

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

EN

回答 3

Stack Overflow用户

发布于 2017-07-13 00:33:56

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

代码语言:javascript
复制
@Column( name = "FILEIMAGE" )
@Lob(type = LobType.BLOB)
private byte[] fileimage;

你也可以使用下面的代码:

代码语言:javascript
复制
@Column(name="content")
@Lob
private Blob content;
票数 0
EN

Stack Overflow用户

发布于 2017-07-13 21:11:45

解决方案非常简单:

代码语言:javascript
复制
@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();
}
票数 0
EN

Stack Overflow用户

发布于 2018-01-17 21:36:44

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

代码语言:javascript
复制
@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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45062956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档