0
我試圖將二進制數據作爲blob存儲在MySQL表中。我知道我的服務器配置爲max_allowed_packet
大小爲1M,因此我將數據分塊爲1M。但我仍然看到這樣的錯誤:SQL blob數據變得越來越多導致max_allowed_packet錯誤
例外:用於查詢的數據包太大(1851203> 1048576)。您可以通過設置max_allowed_packet' 變量, 在服務器上更改此值。
似乎正在發生的事情是PreparedStatement
正在轉義我的分塊blob中的數據。
例如blob 0000
將作爲\0\0\0\0
發送。
因此,在最壞的情況下,數據可能會導致錯誤的大小加倍。
我唯一的想法是將數據分塊爲max_allowed_packet
大小的一半,爲可能的轉義字符留出空間。
有沒有更好的方法?我應該在將數據分塊之前預先逃脫我的數據?
您正在使用'setBlob'和'InputStream'? –
@JoopEggen我正在使用'setBlob(int parameterIndex,Blob x)' –
數據示例(0000)會建議先壓縮,但我懷疑你可以使用它。斑點是PITA;想想關於數據庫備份(和恢復)的例子。 –