I'm trying to insert some Binary data into a MySQL database without using prepared statements. The reason for this is that I concatenate thousands of statements into a single insert an run that once. (Exactly how the MySQL dump & import works)
I have tried the following statements, but the are all failing:
INSERT INTO my_table VALUES (1,'g=���F|�}X���',2);
INSERT INTO my_table VALUES (1,CAST( 'g=���F|�}X���' AS BINARY),2);
INSERT INTO my_table VALUES (1,CONVERT( 'g=���F|�}X���', BINARY),2);
INSERT INTO my_table VALUES (1,BINARY 'g=���F|�}X���',2)
The error I get is:
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'binary_data' at row 1
The code I use to execute the statement is simply:
conn.createStatement().executeUpdate(sql);
PreparedStatements work fine (but are too slow in this case)
The actual String I in the database displays a little differet:
g=÷óF|¸}X£ì[
Binary View: 67 3d 81 f7 19 f3 46 7c b8 7d 58 8c 10 a3 ec 5b
Java Bytes: 103, 61, -127, -9, 25, -13, 70, 124, -72, 125, 88, -116, 16, -93, -20, 91
Could this be something to do with Encoding ?
Any hints much apprecaited, Ro
PreparedStatementORCallableStatementand not possible using simpleStatement.INSERTstatements? Encoding likely matters, but you also have to worry about correct escaping (e.g. if the binary data has a'in it). Also do you check your JDBC connection parameters, such asuseUnicodeandcharacterEncoding?