我要将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+,所以我也不相信有增加页面大小的方法。该数据库由组织管理,当前无法升级到较新版本。
答案 0 :(得分:0)
“太多”中的314列。但是,由于将其拆分为CSV文件相当麻烦,因此请考虑以下几点:可能可以帮助您将这么多列加载到该文件中:
TINYINT UNSIGNED
仅1个字节,并允许数字0..255。有关其他尺寸,请参见手册。VARCHARs
:不要对所有内容都简单地说VARCHAR(255)
。如果拍摄不足,则会被截断,因此可能需要经过两遍才能找出最佳尺寸。CHARACTER SET latin1
用于任何您知道只是英语甚至西欧的列。否则在必要时使用utf8
或utf8mb4
。TEXT
和BLOB
。向我们展示数据样本;我们可能有其他提示。
(您可以将16KB的限制提高到64KB,但这将永久更改所有表的限制。几乎没有人这样做。我不知道是否有危险,如果有的话。)< / p>