插入长blob值为14MB时的EndOfStreamException

时间:2014-04-30 15:25:00

标签: mysql .net database

我在尝试将记录插入包含14MB大小blob字段的MySQL时遇到以下异常:

MySql.Data.MySqlClient.MySqlException (0x80004005): Fatal error encountered during command execution. ---> 
MySql.Data.MySqlClient.MySqlException (0x80004005): Fatal error encountered attempting to read the resultset. ---> 
MySql.Data.MySqlClient.MySqlException (0x80004005): Reading from the stream has failed. ---> 
System.IO.EndOfStreamException

我已经尝试过我在网上找到的大多数提示。这是我的配置:

  • .Net 6.7.5的MySQL连接器。
  • 目标blob字段的类型为longblob
  • max_allowed_pa​​cket设置为100M(在ini文件的客户端部分和MySQL部分中)

我在远程场景中使用MySQL,因此我的连接字符串包含UseCompression=True。当我设置UseCompression=False时,一切正常(但速度较慢)。

所以我现在的结论是:MySQL的客户端库或MySQL引擎本身都必须存在错误。我想在幕后发生的事情如下:

  • 将源数据写入客户端的本地缓冲区,以及包含数据大小
  • 的int
  • 源数据在通过线路发送之前在本地进行压缩。但是,库不会将blob字段的大小更新为新的(压缩的)大小( - > bug)
  • 然后客户端库传输到服务器并继续从缓冲区读取,缓冲区现在小于size-int。所以我们遇到了EndOfStreamException

这个假设可以解释经验丰富的症状。

我已向Oracle发布了一个错误报告:http://bugs.mysql.com/bug.php?id=72494

有谁知道可能导致此异常的原因?

0 个答案:

没有答案