• 技术文章 >数据库 >MySQL

    mysql中blob类型乱码的解决。

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

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

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

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

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    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配置文件中指定

    1

    <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学习网