尝试将字节插入DB(MySQL)时出现异常

时间:2013-12-06 16:49:53

标签: java mysql

我正在尝试将此记录插入到数据库中,其中包含TEXT NOT NULL列(并尝试使用utf8和unicode等),但到目前为止,在Java中使用这个dang插件工作时没有运气。我似乎没有在Python中遇到这些问题,但我需要做的是将这些数据存储在我的java服务器中,然后使用我的Python网站检索它。我提供了一小段代码和下面的Java异常。我花了很多时间将MySQL从5.1升级到5.6,因为我在网上看到Bytes的处理方式不同,但这没有帮助。

很高兴提供有用的其他信息。

public static byte[] compress(String str) throws Exception {
    if (str == null || str.length() == 0) {
        return null;
    }

    ByteArrayOutputStream obj = new ByteArrayOutputStream();
    GZIPOutputStream gzip = new GZIPOutputStream(obj);
    gzip.write(str.getBytes("UTF-8"));
    gzip.close();
    return obj.toByteArray();
}

byte [] bytes = null;
        try {
            bytes = compress(test); // test is a huge JSON String
        } catch (Exception e) {
            e.printStackTrace();
        }
try {
            Class.forName("com.mysql.jdbc.Driver");
            connect = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/badlionDev?"
                           + "user=root&password=password&useUnicode=true&characterEncoding=UTF-8");
            preparedStatement = connect.prepareStatement("UPDATE kit_pvp_matches SET data = ?;");
            // "myuser, webpage, datum, summary, COMMENTS from FEEDBACK.COMMENTS");
            // Parameters start with 1
            preparedStatement.setBytes(1, bytes);
            preparedStatement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
        }


java.sql.SQLException: Incorrect string value: '\x8B\x08\x00\x00\x00\x00...' for column 'data' at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2825)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2156)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2459)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2376)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2360)
    at TestCompression.main(TestCompression.java:34)

1 个答案:

答案 0 :(得分:1)

您应该将字符集设置为BINARY或使用BLOB类型。如果将其设置为UTF-8,则MySQL需要有效的UTF-8数据。例外情况是说这不是有效的UTF-8数据。