将二进制数据插入MySQL(没有PreparedStatement)

Ro.*_*Ro. 5 java mysql jdbc

我试图在不使用预准备语句的情况下将一些二进制数据插入MySQL数据库.这样做的原因是我将数千个语句连接成一次运行一次.(究竟MySQL转储和导入是如何工作的)

我已经尝试了以下语句,但都失败了:

INSERT INTO my_table VALUES(1,'g = F| }X ',2);

INSERT INTO my_table VALUES(1,CAST('g = F| }X 'ASBINARY),2);

INSERT INTO my_table VALUES(1,CONVERT('g = F| }X ',BINARY),2);

INSERT INTO my_table VALUES(1,BINARY'g = F| }X ',2)

我得到的错误是:

com.mysql.jdbc.MysqlDataTruncation:数据截断:第1行的列'binary_data'的数据太长

我用来执行语句的代码很简单:

.conn.createStatement()的executeUpdate(SQL);

PreparedStatements工作正常(但在这种情况下速度太慢)

数据库中的实际String I显示有点不同:

G =÷的|¸} X£I [

二进制视图:67 3d 81 f7 19 f3 46 7c b8 7d 58 8c 10 a3 ec 5b

Java字节:103,61,-127,-9,25,-13,70,124,-72,125,88,-116,16,-93,-20,91

这可能与编码有关吗?

任何提示都很多,Ro

Ro.*_*Ro. 12

找到解决方案....虽然不是我看到的任何地方记录的.....

您可以通过写入转换为HEX且前面为0x的字节来直接插入二进制数据

例如:

INSERT INTO my_table VALUES (1,0x19c0300dc90e7cedf64703ed8ae8683b,2);
Run Code Online (Sandbox Code Playgroud)

  • 我没有意识到 mysql 会像这样自动解码十六进制,感谢这篇有用的文章。 (2认同)