问题详情:
框架为SSM
业务场景:
将数据库表a中的内容字段(longblob ),转存到表b中时,b中内容乱码,文件大小改变;
困扰了我好久.
查看网上资料没有找到合适的解决方案,最终老板给出了解决方案,留记录.
经查看,是在插入过程中代码中使用byte[]转存,出现的乱码问题.
解决方法:
1.在java代码中写sql语句,不经过mybatis层
public void insertOrUpdate(List<Z> newAddList) {
String sql = "REPLACE INTO TABLE (ARTICLE_ID, NAME,CONTENT,MAP_SOURCE,MAP_ID,SYNC_TIME,CREATOR)" + //
"values (?, ?, ?, '固定字段', ?, ?, '固定字段')";
try (Transaction tran = AppContext.getDefaultTransaction()) {
tran.prepare(sql);
for (Z z : newAddList) {
tran.setParameters(attachmentVo.getArticleId(), attachmentVo.getAtteName(), attachmentVo.getAtteContent(), attachmentVo.getId(),
attachmentVo.getTrsupDate());
tran.executeUpdate();
}
} catch (SQLException e) {
e.printStackTrace();
}
2.更改BlobByteTypeHandler
typeHandler=org.apache.ibatis.type.ByteArrayTypeHandler
xml中该字段的类型
<result column="atte_content" javaType="byte[]" jdbcType="LONGVARBINARY" property="atteContent" typeHandler="org.apache.ibatis.type.BlobTypeHandler" />