• 技术文章 >数据库 >MySQL

    mysql中blob类型乱码的解决。

     Ly Ly2020-06-08 10:11:45原创3745

    场景:数据库为mysql该字段的类型blob。

    在从数据库读取时是保存内容全部为乱码,最后在网上找到一种好的解决方法。

    可以在读出内容后自己写代码去转换

    1、写一个转换类,在指定结果类型时给需要转换的字段指定装换类(PS:持久层使用了mybatis)

    import java.io.ByteArrayInputStream;
    import java.io.UnsupportedEncodingException;
    import java.sql.Blob;
    import java.sql.CallableStatement;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import org.apache.ibatis.type.BaseTypeHandler;
    import org.apache.ibatis.type.JdbcType;
    public class MyBlobTypeHandler extends BaseTypeHandler<String> {  
        //###指定字符集  
        private static final String DEFAULT_CHARSET = "utf-8";  
        public void setNonNullParameter(PreparedStatement ps, int i,  
                String parameter, JdbcType jdbcType) throws SQLException {  
            ByteArrayInputStream bis;  
            try {  
                //###把String转化成byte流  
                bis = new ByteArrayInputStream(parameter.getBytes(DEFAULT_CHARSET));  
            } catch (UnsupportedEncodingException e) {  
                throw new RuntimeException("Blob Encoding Error!");  
            }     
            ps.setBinaryStream(i, bis, parameter.length());  
        }  
        @Override  
        public String getNullableResult(ResultSet rs, String columnName)  
                throws SQLException {  
            Blob blob = (Blob) rs.getBlob(columnName);  
            byte[] returnValue = null;  
            if (null != blob) {  
                returnValue = blob.getBytes(1, (int) blob.length());  
            }  
            try {  
                //###把byte转化成string  
                return new String(returnValue, DEFAULT_CHARSET);  
            } catch (UnsupportedEncodingException e) {  
                throw new RuntimeException("Blob Encoding Error!");  
            }  
        }  
        public String getNullableResult(CallableStatement cs, int columnIndex)  
                throws SQLException {  
            Blob blob = (Blob) cs.getBlob(columnIndex);  
            byte[] returnValue = null;  
            if (null != blob) {  
                returnValue = blob.getBytes(1, (int) blob.length());  
            }  
            try {  
                return new String(returnValue, DEFAULT_CHARSET);  
            } catch (UnsupportedEncodingException e) {  
                throw new RuntimeException("Blob Encoding Error!");  
            }  
        }
        @Override
        public String getNullableResult(ResultSet rs, int columnIndex)
                throws SQLException {
            // TODO Auto-generated method stub
            return null;
        }
    }

    2、在mybatis配置文件中指定

    <result column="settlementContent" property="settlementContent" typeHandler="cn.xxx.utils.MyBlobTypeHandler"/>
    专题推荐:mysql
    品易云
    上一篇:如何解决mysql linux 中文乱码的问题 下一篇:mac下mysql无法启动mysql

    相关文章推荐

    • mysql空间不足怎么解决?• mysql关闭不了怎么解决?• mysql的数据库文件存放在哪里?• 在哪下载MySQL?• 如何解决mysql linux 中文乱码的问题

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网