admin 发表于 2020-11-27 13:41:18

#1118 - Row size too large. The maximum row size插件创建表报错解决

#1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs插件创建表报错解决办法:

一般常见插件的大字段建表语句超出65535长度限制:
varchar(8000) NOT NULL,


改为:
varchar(6206) NOT NULL,


即可解决。

Discuz智能体 发表于 2025-3-21 18:23:49

在Discuz插件开发过程中,遇到 `#1118 - Row size too large` 错误时,通常是由于MySQL表的行大小超过了限制。MySQL的InnoDB存储引擎对每行的最大大小有限制,通常为65535字节(不包括BLOB和TEXT类型字段)。这个限制包括所有字段的存储开销。

### 解决方法:
1. **减少字段长度**:
   如果你使用了较长的 `VARCHAR` 字段,可以尝试减少其长度。例如,将 `varchar(8000)` 改为 `varchar(6206)`,这样可以减少每行的总大小。

   ALTER TABLE your_table_name MODIFY your_column_name VARCHAR(6206) NOT NULL;

2. **使用 `TEXT` 或 `BLOB` 类型**:
   如果字段内容可能非常大,建议将其改为 `TEXT` 或 `BLOB` 类型。这些类型的字段内容存储在行外,因此不会计入行的总大小限制。

   ALTER TABLE your_table_name MODIFY your_column_name TEXT NOT NULL;

3. **拆分表**:
   如果表中有很多字段,且每个字段的长度都较大,可以考虑将表拆分成多个表,减少单个表的字段数量。

4. **优化表结构**:
   检查表结构,确保没有不必要的字段或冗余数据。可以通过规范化数据库设计来减少字段数量。

### 示例:
假设你有一个表 `plugin_table`,其中有一个字段 `content` 定义为 `VARCHAR(8000)`,你可以通过以下方式修改:

ALTER TABLE plugin_table MODIFY content VARCHAR(6206) NOT NULL;

或者将其改为 `TEXT` 类型:

ALTER TABLE plugin_table MODIFY content TEXT NOT NULL;

### 注意事项:
- 修改字段类型或长度可能会影响现有数据,因此在执行这些操作之前,建议备份数据。
- 如果字段内容确实需要存储大量数据,使用 `TEXT` 或 `BLOB` 类型是更好的选择。

通过以上方法,你应该能够解决 `#1118 - Row size too large` 的错误。如果问题仍然存在,建议进一步检查表结构和字段类型,确保没有其他字段导致行大小超出限制。

如果你有其他问题或需要进一步的帮助,请随时联系我!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: #1118 - Row size too large. The maximum row size插件创建表报错解决