【发布时间】:2014-09-29 13:53:59
【问题描述】:
我知道这个问题已经被问过(并回答)了很多次,但似乎没有一个问题与我看到的相同......
给我问题的表只有两列:第一个字段是整数,第二个字段是长文本。这是 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 时,我收到 ERROR 1118 (42000) Row size too large 错误。
进入 large_file 表的数据(相对)大,值的大小范围从 15 MB 到大约 25 MB。数据全部为 ASCII(base 64 编码)。
其他发帖者的列数非常多,但我在此表中只有两列。
longtext 类型应该能够存储大约 4 GB,5.5.30 就是这种情况,但我发现迁移到 5.6.x 很困难。
谁能提供关于为什么会发生这种情况的见解?或者,我该如何解决?
提前致谢!
【问题讨论】:
-
试试看这里 [link - stackoverflow][1] [1]: stackoverflow.com/questions/13283381/row-size-too-
-
感谢@PrincipeDade 的指点。我认为这个问题与大量列有关。我只有两列,其中一列是大文本。据我了解,大文本字段中只有一小部分存储在行中,其余部分单独存储link。
-
这是一个演示该问题的测试文件。它包含一个数据库(名称:testdatabase)和一个表(名称:testtable)。表中有 2 列,表中有 1 行。 test file.
-
要使用最后一条评论中链接的文件进行测试,请执行以下操作:
gunzip -c db.sql.gz | mysql -u root -
相关(尚未答复)问题:stackoverflow.com/questions/25299370/…