SQL blob数据被转义导致max_allowed_pa​​cket错误

时间:2015-07-03 15:34:32

标签: java mysql jdbc

我试图将二进制数据存储为MySQL表中的blob。我知道我的服务器配置了max_allowed_packet大小的1M,因此我将数据分块为1M的blob。但是我仍然看到这样的错误:

  

例外:查询的数据包太大(1851203> 1048576)。您可以   通过设置max_allowed_pa​​cket'来更改服务器上的此值。   变量

似乎正在发生的事情是PreparedStatement正在逃避我的分块中的数据。

e.g。 blob 0000将以\0\0\0\0发送。

因此,在最坏的情况下,数据可能会加倍,导致错误。

我唯一的想法是将数据块化为max_allowed_packet大小的一半,为潜在的转义字符留出空间。

有更好的方法吗?我应该先将数据预先换掉吗?

1 个答案:

答案 0 :(得分:0)

我需要做两件事:

  1. 使用PreparedStatement#setBlob(int parameterIndex, InputStream x)代替setBlob(int parameterIndex, Blob x),正如@JoopEggen建议尝试的那样。
  2. 并在useServerPrepStmts=true上设置属性Connection,如回答中所示 https://stackoverflow.com/a/4846674/52176(在我的案例中不需要其他属性)。