1118: ER_TOO_BIG_ROWSIZE: Row size too large(行大小过大)
MySQL含义
所定义表的行大小超过了存储引擎允许的最大行大小。非 BLOB/TEXT 列的最大行大小为 65535 字节;InnoDB 还有取决于页大小的额外限制。
原因
定义了许多宽列(尤其是长 VARCHAR/CHAR);在 utf8mb4 等多字节字符集中每个字符最多占 4 字节;或在 InnoDB 的 COMPACT/REDUNDANT 行格式中大列以内联方式存储。
解决方法
将部分大列转换为 TEXT/BLOB(这些列可以页外存储);缩小不必要或过宽的列,或将表一分为二。在 InnoDB 中,使用 ROW_FORMAT=DYNAMIC 或 COMPRESSED 可将大列移到页外:ALTER TABLE my_table ROW_FORMAT=DYNAMIC; 同时考虑 innodb_page_size。
同一数据库的其他条目
- 1290ER_OPTION_PREVENTS_STATEMENT: running with the --read-only option(以 --read-only 选项运行)
- 1836ER_READ_ONLY_MODE: Running in read-only mode(以只读模式运行)
- 3819ER_CHECK_CONSTRAINT_VIOLATED: Check constraint is violated(违反 CHECK 约束)
- 1170ER_BLOB_KEY_WITHOUT_LENGTH: BLOB/TEXT column used in key specification without a key length(在键定义中使用 BLOB/TEXT 列但未指定键长度)
- 1592ER_BINLOG_UNSAFE_STATEMENT: Unsafe statement written to the binary log(不安全的语句被写入二进制日志)
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text(无效的 JSON 文本)
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value(表中没有对应该值的分区)