我尝试在Windows 8.1上的Websphere Liberty服务器上部署iOS的worklight应用程序中心。但是当我尝试通过appcenter控制台添加IBMAppCenter.ipa时,我在服务器日志中遇到异常。
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline. {prepstmnt 1563792952 INSERT INTO APPLICATION_STORAGE (CONTENT, AP_FK) VALUES (?, ?) [params=(InputStream) java.io.ByteArrayInputStream@5987916, (null) null]} [code=1118, state=42000]
以下是重现我的问题的方案:
我尝试按照Change limit for "Mysql Row size too large"上hjpotter92的建议启用表APPLICATION_STORAGE的压缩,但没有任何运气。任何帮助将不胜感激。
以下是APPLICATION_STORAGE表的定义,它导致了问题:
CREATE TABLE APPLICATION_STORAGE (ID INTEGER NOT NULL AUTO_INCREMENT, CONTENT LONGBLOB, AP_FK INTEGER, PRIMARY KEY (ID)) ENGINE = innodb;
答案 0 :(得分:5)
将innodb_log_file_size属性增加到256M解决了我的问题。显然,重做日志会覆盖大blob的最新检查点,如下所述:http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-20.html
重要更改:大型外部存储的BLOB字段的重做日志写入可能会覆盖最近的检查点。 5.6.20补丁将重做日志BLOB写入的大小限制为重做日志文件大小的10%。 5.7.5补丁解决了bug而没有施加限制。对于MySQL 5.5,该bug仍然是一个已知的限制。
由于为MySQL 5.6引入了重做日志BLOB写入限制,innodb_log_file_size应设置为大于表格行中找到的最大BLOB数据大小的10倍加上其他可变长度字段长度的值( VARCHAR,VARBINARY和TEXT类型字段)。如果不这样做可能会导致“行大小太大”错误。如果您的innodb_log_file_size设置已足够大或您的表不包含BLOB数据,则无需任何操作。 (Bug#16963396,Bug#19030353,Bug#69477)