Mysql数据库报错:Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DY
时间: 2024-05-16 18:10:23 浏览: 265
这个错误通常出现在创建或修改表时,当表中的一行大小超过了MySQL所允许的最大大小时,就会发生这个错误。MySQL规定,一行数据的最大大小不能超过 65,535 bytes。如果你使用的是InnoDB存储引擎,每个数据页默认大小为16KB,因此一行数据最大不能超过16KB。如果你使用的是MyISAM存储引擎,每个数据页默认大小为8KB,因此一行数据最大不能超过8KB。
解决这个问题的方式有两种:
1. 修改表结构,将某些字段从VARCHAR等类型转换成TEXT或BLOB类型,这样可以减小每行数据的大小。
2. 修改表的ROW_FORMAT属性为DYNAMIC或COMPRESSED。DYNAMIC和COMPRESSED都可以动态地调整行的大小,从而避免Row size too large的错误。
相关问题
Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help
这个错误提示表示行的大小超过了MySQL的限制。你可以尝试以下解决方法之一:
1. 将一些列的数据类型更改为TEXT或BLOB类型,因为它们可以存储更大的数据。
2. 使用ROW_FORMAT=DYNAMIC或ROW_FORMAT=COMPRESSED来设置行的格式。这些选项可以减小行的大小限制。
3. 如果可能的话,重新设计表结构以减少行的大小。
需要注意的是,根据具体情况,选择合适的解决方法。
mysql8.0建表 SQL 错误 [1118] [42000]: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
这个错误是由于 MySQL 8.0 默认的行格式导致的。在 MySQL 8.0 中,行格式为 `DYNAMIC`,且每行的最大大小限制为 8126 字节当你尝试创建一个超过该限制的表时,就会出现 "Row size too large" 的错误。
为了解决这个问题,你可以尝试以下方法:
1. 使用 `ROW_FORMAT=DYNAMIC` 或 `ROW_FORMAT=COMPRESSED` 行格式来创建表。这些行格式允许更大的行大小。例如:
```sql
CREATE TABLE your_table (
column1 INT,
column2 VARCHAR(4000),
column3 TEXT,
...
) ROW_FORMAT=DYNAMIC;
```
或
```sql
CREATE TABLE your_table (
column1 INT,
column2 VARCHAR(4000),
column3 TEXT,
...
) ROW_FORMAT=COMPRESSED;
```
2. 将需要存储大量数据的列更改为 `TEXT` 或 `BLOB` 类型。这将使这些列以外部存储的方式进行存储,而不是内联存储在行中。例如,将 `VARCHAR` 类型列改为 `TEXT` 类型:
```sql
CREATE TABLE your_table (
column1 INT,
column2 TEXT,
column3 TEXT,
...
);
```
请注意,将列更改为 `TEXT` 或 `BLOB` 类型可能会影响查询和索引的性能。
3. 如果以上方法仍然无法解决问题,你可以考虑调整 MySQL 的配置文件,增加 `innodb_log_file_size` 和 `innodb_strict_mode` 的值。请注意,在修改配置文件之前,确保备份了重要的数据和配置文件。
这些方法应该能够帮助你解决 "Row size too large" 错误。如果问题仍然存在,建议根据你的具体需求,合理设计表结构,并确保每行的大小不超过 MySQL 的限制。
阅读全文