如何使用 MariaDB 5.5 修复 "ERROR 1118 (42000): Row size too large (> 8126)"?

How to fix "ERROR 1118 (42000): Row size too large (> 8126)" with MariaDB 5.5?

我正在将一个包含 314 列的 CSV 文件上传到 MariaDB 5.5 服务器。目前我的代码如下所示:

CREATE TABLE table_name
   (column_1 TEXT,
    column_2 TEXT,
    ...
    column_314 TEXT)
ROW_FORMAT=DYNAMIC;
LOAD DATA LOCAL INFILE filepath  
INTO TABLE table_name 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 ROWS;

这会导致以下错误:

ERROR 1118 (42000): 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.

我正在使用 Barracuda InnoDB 文件格式,每个 table 文件已启用:

innodb_file_format=Barracuda
innodb_file_per_table=1

我认为问题出在 innodb 页面大小,设置为 16k。由于我使用的是 MariaDB 5.5 而不是 10.1+,我认为也没有办法增加页面大小。数据库由组织管理,目前无法升级到更新版本。

314 列“太多”了。但是,由于将其拆分为 CSV 文件相当混乱,这里有一些关于 可能 帮助您加载这么多列的想法:

  • 务必使用 minimal-sized 整数:TINYINT UNSIGNED 只有 1 个字节,允许数字 0..255。其他尺寸参见手册。
  • 请务必使用 minimal-sized VARCHARs:不要简单地对所有内容说 VARCHAR(255)。如果你 under-shoot,你会被截断,所以可能需要几次才能找出最佳尺寸。
  • 使用 CHARACTER SET latin1 表示您知道的任何专栏是英语的,甚至是西欧的。否则在必要时使用 utf8utf8mb4
  • 除非必要,否则请避免使用 TEXTBLOB

向我们展示数据样本;我们可能会有进一步的提示。

(您 可以 将 16KB 的限制提高到 64KB,但这将永远改变所有 table 的限制。几乎没有人这样做。我不知道危险,如果有的话。)