Byte数组保存到MySQL后长度增加的问题
创始人
2025-01-12 22:36:13
0

这是因为MySQL对于BLOB类型的数据默认使用了UTF-8编码,而UTF-8编码是一种变长编码。因此,解决此问题的方法是在将Byte数组写入MySQL前,将其转换为字符集为latin1的字符串,这样可以保证长度不再发生变化。具体代码实现如下:

// byte数组转为latin1编码的字符串
public static String latin1ByteArrayToString(byte[] bytes) {
    Charset latin1Charset = Charset.forName("ISO-8859-1");
    CharBuffer buffer = latin1Charset.decode(ByteBuffer.wrap(bytes));
    return buffer.toString();
}

// latin1编码的字符串转为byte数组
public static byte[] latin1StringToByteArray(String str) {
    Charset latin1Charset = Charset.forName("ISO-8859-1");
    ByteBuffer buffer = latin1Charset.encode(CharBuffer.wrap(str));
    byte[] bytes = new byte[buffer.limit()];
    buffer.get(bytes);
    return bytes;
}

// 将byte数组写入MySQL
public static void writeByteArrayToMySQL(byte[] bytes) {
    try {
        String latin1Str = latin1ByteArrayToString(bytes);
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "user", "password");
        PreparedStatement ps = conn.prepareStatement("INSERT INTO mytable (mycolumn) VALUES (?)");
        ps.setString(1, latin1Str);
        ps.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

// 从MySQL读取byte数组
public static byte[] readByteArrayFromMySQL() {
    try {
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/mydb", "user", "password");
        PreparedStatement ps = conn.prepareStatement("SELECT mycolumn FROM mytable WHERE id = ?");
        ps.setInt(1, 1);
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            String latin1Str = rs.getString("mycolumn");
            return latin1StringToByteArray(latin1Str);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}

相关内容

热门资讯

从来有辅助"龙江博乐... 从来有辅助"龙江博乐填大坑辅助"详细开挂辅助平台有挂透视(力荐教程)【无需打开直接搜索加薇13670...
最初有开挂"陕麻圈智... 最初有开挂"陕麻圈智能辅助软件"开挂(透视)辅助工具(黑科技教程有挂方法)您好:陕麻圈智能辅助软件这...
手筋开挂"钱塘十水三... 钱塘十水三辅助开挂教程视频分享装挂详细步骤在当今的网络游戏中,钱塘十水三辅助作为一种经典的娱乐方式,...
透视了解!麻友圈安庆版插件,皇... 透视了解!麻友圈安庆版插件,皇豪互娱控制系统(透视)开挂辅助安装教你教程 >>您好:软件加薇1367...
原先有开挂"衢州都莱... 原先有开挂"衢州都莱辅助器是真是假"详细开挂辅助插件了解有挂(透明挂教程!)>>您好:软件加1367...
手册辅助"皮皮游戏挂... >>您好:皮皮游戏挂机辅助确实是有挂的,很多玩家在这款皮皮游戏挂机辅助游戏中打牌都会发现很多用户的牌...
原先有辅助"aapo... 【亲,aapoker透视脚本 这款游戏可以开挂的,确实是有挂的,很多玩家在这款aapoker透视脚本...
透视规律!八闽掌上十八卦脚本,... 透视规律!八闽掌上十八卦脚本,werplan透视挂(透视)开挂辅助挂线上教程;亲,八闽掌上十八卦脚本...
本然有辅助"九江讨赏... 九江讨赏插件 无需打开直接搜索微信:136704302本司针对手游进行,选择我们的四大理由: 1、软...
秘籍开挂"皮皮游戏挂... 秘籍开挂"皮皮游戏挂机辅助"开挂(脚本)辅助脚本(有挂总结);无需打开直接搜索薇:136704302...