当前位置: 首页 > 面试题库 >

错误1118(42000)行大小太大

宇文德明
2023-03-14
问题内容

我知道这个问题已经被问过很多次了,但是似乎没有一个是我所看到的相同的问题。

给我带来问题的表只有两列:第一个字段是整数,第二个字段是longtext。这是来自MySQL 5.5.30的转储文件的一部分:

1 - MySQL dump 10.13  Distrib 5.5.30, for Linux (x86_64)
2 --
3 -- Host: localhost    Database: mydatabasename
4 -- ------------------------------------------------------
5 -- Server version   5.5.30-log

32 DROP TABLE IF EXISTS `large_file`;
33 /*!40101 SET @saved_cs_client     = @@character_set_client */;
34 /*!40101 SET character_set_client = utf8 */;
35 CREATE TABLE `large_file` (
36   `id` int(11) NOT NULL AUTO_INCREMENT,
37   `data` longtext,
38   PRIMARY KEY (`id`)
39 ) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=latin1;
40 /*!40101 SET character_set_client = @saved_cs_client */;

43 -- Dumping data for table `large_file`
44 --
45 
46 LOCK TABLES `large_file` WRITE;
47 /*!40000 ALTER TABLE `large_file` DISABLE KEYS */;
48 INSERT INTO `large_file` VALUES(38,'GyUtMTIzNDVYQ... <large data> ...);
49 /*!40000 ALTER TABLE `large_file` ENABLE KEYS */;
50 UNLOCK TABLES;

如您所见,此转储文件来自MySQL 5.5.30,我可以将此数据导入5.5.30。但是,当我尝试导入5.6.x时,出现
错误1118(42000)行大小太大的 错误。

进入large_file表的数据很大(相对),值的范围从15 MB到大约25 MB。数据全部为ASCII(以64为基数编码)。

其他海报的列数非常多,但此表中只有两列。

长文本类型应该能够存储大约4 GB,对于5.5.30就是这种情况,但是我发现很难迁移到5.6.x。

谁能提供为什么发生这种情况的见解?或者,我该如何解决呢?

提前致谢!


问题答案:

检查innodb_log_file_size设置是否足够大-是表中各行中找到的最大BLOB数据大小的10倍以及其他可变长度字段的长度。

以下是来自MySQL
5.6发行说明的内容

InnoDB注意事项

  • 重要更改 :对于大型的,外部存储的BLOB字段,重做日志写入操作可能会覆盖最新的检查点。5.6.20补丁程序将BLOB写入的重做日志大小限制为重做日志文件大小的10%。5.7.5补丁解决了该错误,没有施加任何限制。对于MySQL 5.5,该错误仍然是已知的限制。

由于针对MySQL
5.6引入了重做日志BLOB写限制,因此应将innodb_log_file_size设置为大于表行中找到的最大BLOB数据大小加上其他可变长度字段(VARCHAR,VARBINARY)的长度的10倍的值。和TEXT类型字段)。
否则可能会导致“尺寸过大”错误
。如果您的innodb_log_file_size设置已经足够大或您的表不包含BLOB数据,则无需采取任何措施。(缺陷#16963396,错误#19030353,错误#69477)



 类似资料:
  • 问题内容: 我想创建一个包含 325 列的表: 我用TEXT替换了所有VARCHAR,并在MySQL的my.ini文件中添加了 梭子鱼 ,这是添加的属性: 但是我仍然有这个错误: 编辑:我不能更改数据库的结构,因为它是旧的应用程序/系统/数据库。创建一个新表,它是旧数据库的导出。 EDIT2:我写的这个问题与其他问题类似,但是里面有一些我在互联网上找到的解决方案,例如VARCHAR和Barracu

  • 问题内容: 我正在尝试使用以下查询创建表 我收到以下错误 任何人都可以让我知道如何避免此错误并使查询工作以创建表。 问题答案: 该表中所有字段的总大小大于限制65535,这就是为什么您会收到此错误的原因。 您应该使用type而不是长字符串。全部替换为,它应该可以正常工作。 或者,甚至更好的是,使用适当的数据类型而不是“太大”的数据类型。您真的不需要存储8000个字符,对吗?

  • 我有一个gsp文件,其中包含1800行代码和从该视图渲染的两个模板。在我添加几个if条件之前,该视图工作得非常好。 堆栈跟踪如下:

  • 问题内容: 我有一个单元测试,其中我静态定义了一个很大的字节数组(超过8000个字节)作为我每次运行单元测试时都不希望读取的文件的字节数据。 这在Eclipse中可以正常编译,但是通过Ant脚本进行编译时,出现以下错误: 任何想法为何以及如何避免这种情况? 答案 :Shimi的答案成功了。我将字节数组移到一个单独的类中,并且编译良好。谢谢! 问题答案: Java中的方法在字节码中限制为64k。静态

  • 问题内容: 为什么在将long分配给min和max的地方得到的int数太大? 问题答案: 默认情况下,java中的所有文字数字均为,范围为 包含在内。 您的文字超出了此范围,因此要进行编译,您需要指出它们是文字(即带有的后缀): 请注意,java同时支持大写和小写,但我建议 不要 使用小写,因为它看起来像: 相同的Java语言规范 如果以ASCII字母L或l(ell)为后缀,则整数文字的类型为lo

  • 我一直试图在Dataflow上运行一个apache beam作业,但我从GCP得到了一个错误,其中包含以下消息: 我在过去运行过带有较大图形的作业,没有任何问题。该作业在本地使用Directrunner也运行良好。图中大约有12个节点,包括一个read from Bigquery步骤、一个步骤和一个步骤。 有没有一种方法可以增加数据流愿意接受的图形大小?