我们的数据库服务器在RedHat 6.10上运行MySQL 5.6.40
我们的Web服务器运行Windows2008 R2,运行IIS7.5.X
我们最近注意到,当从.NET表单连接到数据库并运行大型SQL insert语句时,我们的代码抛出了一个异常:
Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
at MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId)
at MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force)
at MySql.Data.MySqlClient.MySqlDataReader.NextResult()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()是的,失败的查询是一个大型查询,查询中的文本大小超过8K,但奇怪的是,从MySQL CLI对有问题的表运行相同的查询会产生一个成功的insert。如果这是行大小的问题,那么它也应该失败,对吧?
我想知道是否有人见过这个问题。在这一点上,我唯一能想到的就是MySQL .NET dlls的bug?在代码中,我们引用了一个比可用版本更旧的dll版本,但其他一切都在运行,所以我们不愿意安装一个新版本,并且必须对我们的网站/应用程序进行一次彻底的重新测试。我已经读了很多关于这个错误的文章,指出了innoDB页面大小、配置等方面的问题,但如果查询在命令行界面上运行良好,我认为这就排除了innoDB的错误。
我绝对不是DBA,所以请善待我。
发布于 2018-07-14 01:52:16
Richardissimo我希望我能由于系统的性质,我不能。
我们确实发现了问题。我回到我的数据库管理员那里,在right conditions下的命令行界面中,查询条件实际上失败了。事实证明,这个问题与使用MySQL连接将UTF8字符串数据连接到拉丁数据库有关:
例如: UPDATE MYTABLE Set History = CONCAT(History,'new data') WHERE....
失败
我们将我们的数据库转换为UTF8,并重新测试,问题就消失了。我仍然不完全理解为什么数据库会抛出一个“行大小太大”的错误,但至少我知道是什么导致了这个错误。
奇怪的是,在我们的拉丁数据库上执行的数百万个SQL事务中,使用CONCAT的查询是唯一有问题的。
https://stackoverflow.com/questions/51315246
复制相似问题