ERROR 1118(42000)行大小太大

Dee*_*Dee 10 mysql sql

我知道这个问题已被多次询问(和回答),但它们似乎都不是我所看到的同样的问题......

给我问题的表只有两列:第一个字段是整数,第二个字段是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;
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这个转储文件来自MySQL 5.5.30,我可以将这些数据导入5.5.30.但是,当我尝试导入到5.6.x时,我得到ERROR 1118(42000)行大小太大的错误.

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

其他海报有很多列的问题,但我在这个表中只有两列.

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

谁能提供有关为何发生这种情况的见解?或者,我如何解决它?

提前致谢!

小智 9

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

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

InnoDB备注

  • 重要更改:对于大型外部存储的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)


小智 6

我在MYSQL 5.7(OSX 10.11)中遇到过这个问题.

以下工作虽然可能不太理想.

另外my.cfn:

innodb_strict_mode = 0    
Run Code Online (Sandbox Code Playgroud)


小智 5

ERROR 1118 (42000) at line 1852: 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.
[mysqld]
innodb_log_file_size = 512M
innodb_strict_mode = 0

ubuntu 16.04 edit path : nano /etc/mysql/mysql.conf.d/mysqld.cnf
Run Code Online (Sandbox Code Playgroud)

这行得通!!…

点击文档