mysql 8.0.13行大小太大(>;8126)
我已经阅读了关于这个错误的所有其他问题。但是我找不到正确的解决方案来修复MySQL服务器8.0.13的错误。请帮忙 我有下表,其中有255列,类型为MEDIUMTEXTmysql 8.0.13行大小太大(>;8126),mysql,innodb,mysql-8.0,Mysql,Innodb,Mysql 8.0,我已经阅读了关于这个错误的所有其他问题。但是我找不到正确的解决方案来修复MySQL服务器8.0.13的错误。请帮忙 我有下表,其中有255列,类型为MEDIUMTEXT CREATE TABLE `guidatatable` ( `id` INT NOT NULL AUTO_INCREMENT, `col01` MEDIUMTEXT NULL, `col02` MEDIUMTEXT NULL, `col03` MEDIUMTEXT NULL, `col04` ME
CREATE TABLE `guidatatable` (
`id` INT NOT NULL AUTO_INCREMENT,
`col01` MEDIUMTEXT NULL,
`col02` MEDIUMTEXT NULL,
`col03` MEDIUMTEXT NULL,
`col04` MEDIUMTEXT NULL,
`col05` MEDIUMTEXT NULL,
`col06` MEDIUMTEXT NULL,
`col07` MEDIUMTEXT NULL,
`col08` MEDIUMTEXT NULL,
`col09` MEDIUMTEXT NULL,
`col10` MEDIUMTEXT NULL,
`col11` MEDIUMTEXT NULL,
`col12` MEDIUMTEXT NULL,
`col13` MEDIUMTEXT NULL,
`col14` MEDIUMTEXT NULL,
`col15` MEDIUMTEXT NULL,
`col16` MEDIUMTEXT NULL,
`col17` MEDIUMTEXT NULL,
`col18` MEDIUMTEXT NULL,
`col19` MEDIUMTEXT NULL,
`col20` MEDIUMTEXT NULL,
`col21` MEDIUMTEXT NULL,
`col22` MEDIUMTEXT NULL,
`col23` MEDIUMTEXT NULL,
`col24` MEDIUMTEXT NULL,
`col25` MEDIUMTEXT NULL,
`col26` MEDIUMTEXT NULL,
`col27` MEDIUMTEXT NULL,
`col28` MEDIUMTEXT NULL,
`col29` MEDIUMTEXT NULL,
`col30` MEDIUMTEXT NULL,
`col31` MEDIUMTEXT NULL,
`col32` MEDIUMTEXT NULL,
`col33` MEDIUMTEXT NULL,
`col34` MEDIUMTEXT NULL,
`col35` MEDIUMTEXT NULL,
`col36` MEDIUMTEXT NULL,
`col37` MEDIUMTEXT NULL,
`col38` MEDIUMTEXT NULL,
`col39` MEDIUMTEXT NULL,
`col40` MEDIUMTEXT NULL,
`col41` MEDIUMTEXT NULL,
`col42` MEDIUMTEXT NULL,
`col43` MEDIUMTEXT NULL,
`col44` MEDIUMTEXT NULL,
`col45` MEDIUMTEXT NULL,
`col46` MEDIUMTEXT NULL,
`col47` MEDIUMTEXT NULL,
`col48` MEDIUMTEXT NULL,
`col49` MEDIUMTEXT NULL,
`col50` MEDIUMTEXT NULL,
`col51` MEDIUMTEXT NULL,
`col52` MEDIUMTEXT NULL,
`col53` MEDIUMTEXT NULL,
`col54` MEDIUMTEXT NULL,
`col55` MEDIUMTEXT NULL,
`col56` MEDIUMTEXT NULL,
`col57` MEDIUMTEXT NULL,
`col58` MEDIUMTEXT NULL,
`col59` MEDIUMTEXT NULL,
`col60` MEDIUMTEXT NULL,
`col61` MEDIUMTEXT NULL,
`col62` MEDIUMTEXT NULL,
`col63` MEDIUMTEXT NULL,
`col64` MEDIUMTEXT NULL,
`col65` MEDIUMTEXT NULL,
`col66` MEDIUMTEXT NULL,
`col67` MEDIUMTEXT NULL,
`col68` MEDIUMTEXT NULL,
`col69` MEDIUMTEXT NULL,
`col70` MEDIUMTEXT NULL,
`col71` MEDIUMTEXT NULL,
`col72` MEDIUMTEXT NULL,
`col73` MEDIUMTEXT NULL,
`col74` MEDIUMTEXT NULL,
`col75` MEDIUMTEXT NULL,
`col76` MEDIUMTEXT NULL,
`col77` MEDIUMTEXT NULL,
`col78` MEDIUMTEXT NULL,
`col79` MEDIUMTEXT NULL,
`col80` MEDIUMTEXT NULL,
`col81` MEDIUMTEXT NULL,
`col82` MEDIUMTEXT NULL,
`col83` MEDIUMTEXT NULL,
`col84` MEDIUMTEXT NULL,
`col85` MEDIUMTEXT NULL,
`col86` MEDIUMTEXT NULL,
`col87` MEDIUMTEXT NULL,
`col88` MEDIUMTEXT NULL,
`col89` MEDIUMTEXT NULL,
`col90` MEDIUMTEXT NULL,
`col91` MEDIUMTEXT NULL,
`col92` MEDIUMTEXT NULL,
`col93` MEDIUMTEXT NULL,
`col94` MEDIUMTEXT NULL,
`col95` MEDIUMTEXT NULL,
`col96` MEDIUMTEXT NULL,
`col97` MEDIUMTEXT NULL,
`col98` MEDIUMTEXT NULL,
`col99` MEDIUMTEXT NULL,
`col100` MEDIUMTEXT NULL,
`col101` MEDIUMTEXT NULL,
`col102` MEDIUMTEXT NULL,
`col103` MEDIUMTEXT NULL,
`col104` MEDIUMTEXT NULL,
`col105` MEDIUMTEXT NULL,
`col106` MEDIUMTEXT NULL,
`col107` MEDIUMTEXT NULL,
`col108` MEDIUMTEXT NULL,
`col109` MEDIUMTEXT NULL,
`col110` MEDIUMTEXT NULL,
`col111` MEDIUMTEXT NULL,
`col112` MEDIUMTEXT NULL,
`col113` MEDIUMTEXT NULL,
`col114` MEDIUMTEXT NULL,
`col115` MEDIUMTEXT NULL,
`col116` MEDIUMTEXT NULL,
`col117` MEDIUMTEXT NULL,
`col118` MEDIUMTEXT NULL,
`col119` MEDIUMTEXT NULL,
`col120` MEDIUMTEXT NULL,
`col121` MEDIUMTEXT NULL,
`col122` MEDIUMTEXT NULL,
`col123` MEDIUMTEXT NULL,
`col124` MEDIUMTEXT NULL,
`col125` MEDIUMTEXT NULL,
`col126` MEDIUMTEXT NULL,
`col127` MEDIUMTEXT NULL,
`col128` MEDIUMTEXT NULL,
`col129` MEDIUMTEXT NULL,
`col130` MEDIUMTEXT NULL,
`col131` MEDIUMTEXT NULL,
`col132` MEDIUMTEXT NULL,
`col133` MEDIUMTEXT NULL,
`col134` MEDIUMTEXT NULL,
`col135` MEDIUMTEXT NULL,
`col136` MEDIUMTEXT NULL,
`col137` MEDIUMTEXT NULL,
`col138` MEDIUMTEXT NULL,
`col139` MEDIUMTEXT NULL,
`col140` MEDIUMTEXT NULL,
`col141` MEDIUMTEXT NULL,
`col142` MEDIUMTEXT NULL,
`col143` MEDIUMTEXT NULL,
`col144` MEDIUMTEXT NULL,
`col145` MEDIUMTEXT NULL,
`col146` MEDIUMTEXT NULL,
`col147` MEDIUMTEXT NULL,
`col148` MEDIUMTEXT NULL,
`col149` MEDIUMTEXT NULL,
`col150` MEDIUMTEXT NULL,
`col151` MEDIUMTEXT NULL,
`col152` MEDIUMTEXT NULL,
`col153` MEDIUMTEXT NULL,
`col154` MEDIUMTEXT NULL,
`col155` MEDIUMTEXT NULL,
`col156` MEDIUMTEXT NULL,
`col157` MEDIUMTEXT NULL,
`col158` MEDIUMTEXT NULL,
`col159` MEDIUMTEXT NULL,
`col160` MEDIUMTEXT NULL,
`col161` MEDIUMTEXT NULL,
`col162` MEDIUMTEXT NULL,
`col163` MEDIUMTEXT NULL,
`col164` MEDIUMTEXT NULL,
`col165` MEDIUMTEXT NULL,
`col166` MEDIUMTEXT NULL,
`col167` MEDIUMTEXT NULL,
`col168` MEDIUMTEXT NULL,
`col169` MEDIUMTEXT NULL,
`col170` MEDIUMTEXT NULL,
`col171` MEDIUMTEXT NULL,
`col172` MEDIUMTEXT NULL,
`col173` MEDIUMTEXT NULL,
`col174` MEDIUMTEXT NULL,
`col175` MEDIUMTEXT NULL,
`col176` MEDIUMTEXT NULL,
`col177` MEDIUMTEXT NULL,
`col178` MEDIUMTEXT NULL,
`col179` MEDIUMTEXT NULL,
`col180` MEDIUMTEXT NULL,
`col181` MEDIUMTEXT NULL,
`col182` MEDIUMTEXT NULL,
`col183` MEDIUMTEXT NULL,
`col184` MEDIUMTEXT NULL,
`col185` MEDIUMTEXT NULL,
`col186` MEDIUMTEXT NULL,
`col187` MEDIUMTEXT NULL,
`col188` MEDIUMTEXT NULL,
`col189` MEDIUMTEXT NULL,
`col190` MEDIUMTEXT NULL,
`col191` MEDIUMTEXT NULL,
`col192` MEDIUMTEXT NULL,
`col193` MEDIUMTEXT NULL,
`col194` MEDIUMTEXT NULL,
`col195` MEDIUMTEXT NULL,
`col196` MEDIUMTEXT NULL,
`col197` MEDIUMTEXT NULL,
`col198` MEDIUMTEXT NULL,
`col199` MEDIUMTEXT NULL,
`col200` MEDIUMTEXT NULL,
`col201` MEDIUMTEXT NULL,
`col202` MEDIUMTEXT NULL,
`col203` MEDIUMTEXT NULL,
`col204` MEDIUMTEXT NULL,
`col205` MEDIUMTEXT NULL,
`col206` MEDIUMTEXT NULL,
`col207` MEDIUMTEXT NULL,
`col208` MEDIUMTEXT NULL,
`col209` MEDIUMTEXT NULL,
`col210` MEDIUMTEXT NULL,
`col211` MEDIUMTEXT NULL,
`col212` MEDIUMTEXT NULL,
`col213` MEDIUMTEXT NULL,
`col214` MEDIUMTEXT NULL,
`col215` MEDIUMTEXT NULL,
`col216` MEDIUMTEXT NULL,
`col217` MEDIUMTEXT NULL,
`col218` MEDIUMTEXT NULL,
`col219` MEDIUMTEXT NULL,
`col220` MEDIUMTEXT NULL,
`col221` MEDIUMTEXT NULL,
`col222` MEDIUMTEXT NULL,
`col223` MEDIUMTEXT NULL,
`col224` MEDIUMTEXT NULL,
`col225` MEDIUMTEXT NULL,
`col226` MEDIUMTEXT NULL,
`col227` MEDIUMTEXT NULL,
`col228` MEDIUMTEXT NULL,
`col229` MEDIUMTEXT NULL,
`col230` MEDIUMTEXT NULL,
`col231` MEDIUMTEXT NULL,
`col232` MEDIUMTEXT NULL,
`col233` MEDIUMTEXT NULL,
`col234` MEDIUMTEXT NULL,
`col235` MEDIUMTEXT NULL,
`col236` MEDIUMTEXT NULL,
`col237` MEDIUMTEXT NULL,
`col238` MEDIUMTEXT NULL,
`col239` MEDIUMTEXT NULL,
`col240` MEDIUMTEXT NULL,
`col241` MEDIUMTEXT NULL,
`col242` MEDIUMTEXT NULL,
`col243` MEDIUMTEXT NULL,
`col244` MEDIUMTEXT NULL,
`col245` MEDIUMTEXT NULL,
`col246` MEDIUMTEXT NULL,
`col247` MEDIUMTEXT NULL,
`col248` MEDIUMTEXT NULL,
`col249` MEDIUMTEXT NULL,
`col250` MEDIUMTEXT NULL,
`col251` MEDIUMTEXT NULL,
`col252` MEDIUMTEXT NULL,
`col253` MEDIUMTEXT NULL,
`col254` MEDIUMTEXT NULL,
`col255` MEDIUMTEXT NULL,
`status` INT NULL,
PRIMARY KEY (`id`))ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
但这让我犯了一个错误-
Error Code: 1118. 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
我尝试过其他替代解决方案,如调整my.ini文件,如将innodb_log_file_大小增加到2G、5G等任何程度,但这些调整都没有成功
此外,我不想只关闭innodb_strict_模式,因为我不认为关闭验证是唯一的解决方案。对于MYSQL服务器版本8.0.13,任何其他人都可以使用这种类型的表。MYSQL有一个最大行大小
因此,最好的选择可能是将表数据规范化为以下内容
CREATE TABLE guidatatable (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT
, col_row_position INT UNSIGNED NOT NULL
, col_text MEDIUMTEXT NULL
, col_position INT UNSIGNED NOT NULL
, guidatatable_status VARCHAR(255)
, KEY(col_row_position, col_position)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
这也处理了MySQL更好的问题。通过设计一种愚蠢的表,您已经达到了大小限制,对不起!当您有这样一个“数组”方案时,您应该进行规范化—SQL就是为您设计的 你需要把你的桌子弄平。您需要的不是
(id,val1,val2,val3,val4,…)
,而是(id,1,val),(id,2,val),(id,3,val),…
。使用此方案,您将不会达到大小限制,并且您将拥有一个更加惯用的模式
您还需要考虑status
字段,因此我们最终得到如下结果:
CREATE TABLE `guidatatable` (
`id` INT NOT NULL AUTO_INCREMENT,
`status` INT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
CREATE TABLE `guidatatable_values` (
`id` INT NOT NULL,
`colNum` INT NOT NULL,
`colValue` MEDIUMTEXT NOT NULL,
PRIMARY KEY (`id`, `colNum`)
) ENGINE=InnoDB;
确保guidatatable\u values.id
是引用guidatatable.id
的外键(我一下子就忘了最好的语法)
数据转换的具体示例;这:
id col01 col02 col03 status
1 Hello World ! 42
2 How Are You 99
3 I Am Fine 168
变成这样:
id status
1 42
2 99
3 168
id colNum colValue
1 1 Hello
1 2 World
1 3 !
2 1 How
2 2 Are
2 3 You
3 1 I
3 2 Am
3 3 Fine
如您所见,表中存储的所有语义和关系信息都保持不变;它刚刚被重组
一般来说,一旦达到最大表大小,您就知道您的表太大了,可能可以进行更好的设计。这在大型应用程序中尤其可能发生,在这些应用程序中,遗留需求导致表不断增长……同样,这通常是无法充分设计新功能的一个例子。行大小或严格模式与上述错误无关。您是否尝试过减少表中的列数?你考虑过规范化这些数据吗?@O.Jones,我不能减少列数,因为我需要相同的列数。可能的重复除了更改表结构之外,你无法真正解决这个问题。这是MySQL设置的约束。几乎正确,topicstarters表结构中有两个“位置”:行和列。您没有维护“行”位置数据。@RaymondNijland我不懂。OP表中的每段数据都有:一个ID(逐字)、一个列号(字段名
colX
)和一个值(存储在字段colX
中的值)。我建议有三个字段:ID、列号和值。缺少什么?哦,还有status
,应该放在另一个表中(id,status
).想一想topicstarter表结构中的所有列都属于一行/记录..如何在表结构中判断id为200的记录实际上是id为1的topicstarter记录?@RaymondNijland我不明白你在说什么。你仍然有争吵。行是SQL数据库固有的。你所说的“记录1”是什么?id=200的条目是id=200的条目。ID是识别信息的一部分,我还没有把它去掉。Nujland,这似乎是个好主意。但在这一点上,我不能更改后端代码,因为这会为我处理应用程序中的大量代码。但我以后肯定会试试这个。好的@thedevd,那会更有意义是的。让我想想还有另一种方法。col\u row\u position
和col\u position
代表什么?你能举例说明OP的表格将如何映射到这个表格吗?请看一个例子@LightnessRacesinOrbit@RaymondNijlandcol_row\u position
在那里是没有意义的。它包含应该在id
中的值。现在,id
是一种自动递增的东西,它不包含以前在OP表中编码的有用信息。您的id
行的用途是什么?您是否可能误解了主键的用途?这不是为了盲目地数行!它用于标识一个关系(一个现在跨越多行的关系)。