如何使用MariaDB 5.5解决“错误1118(42000):行大小太大(> 8126)”的问题?

时间:2019-04-02 21:09:43

标签: mysql sql mariadb innodb

我要将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.

我正在使用梭子鱼InnoDB文件格式,并且启用了每个表的文件:

innodb_file_format=Barracuda
innodb_file_per_table=1

我相信问题是innodb页面大小,它设置为16k。因为我使用的是MariaDB 5.5,而不是10.1+,所以我也不相信有增加页面大小的方法。该数据库由组织管理,当前无法升级到较新版本。

1 个答案:

答案 0 :(得分:0)

“太多”中的314列。但是,由于将其拆分为CSV文件相当麻烦,因此请考虑以下几点:可能可以帮助您将这么多列加载到该文件中:

  • 请确保使用最小尺寸的整数:TINYINT UNSIGNED仅1个字节,并允许数字0..255。有关其他尺寸,请参见手册。
  • 请确保使用最小尺寸的VARCHARs:不要对所有内容都简单地说VARCHAR(255)。如果拍摄不足,则会被截断,因此可能需要经过两遍才能找出最佳尺寸。
  • CHARACTER SET latin1用于任何您知道只是英语甚至西欧的列。否则在必要时使用utf8utf8mb4
  • 除非必要,请避免使用TEXTBLOB

向我们展示数据样本;我们可能有其他提示。

(您可以将16KB的限制提高到64KB,但这将永久更改所有表的限制。几乎没有人这样做。我不知道是否有危险,如果有的话。)< / p>