如何使用 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
表示您知道的任何专栏是英语的,甚至是西欧的。否则在必要时使用 utf8
或 utf8mb4
。
- 除非必要,否则请避免使用
TEXT
和 BLOB
。
向我们展示数据样本;我们可能会有进一步的提示。
(您 可以 将 16KB 的限制提高到 64KB,但这将永远改变所有 table 的限制。几乎没有人这样做。我不知道危险,如果有的话。)
我正在将一个包含 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
表示您知道的任何专栏是英语的,甚至是西欧的。否则在必要时使用utf8
或utf8mb4
。 - 除非必要,否则请避免使用
TEXT
和BLOB
。
向我们展示数据样本;我们可能会有进一步的提示。
(您 可以 将 16KB 的限制提高到 64KB,但这将永远改变所有 table 的限制。几乎没有人这样做。我不知道危险,如果有的话。)