1118: ER_TOO_BIG_ROWSIZE: Row size too large
MySQL의미
정의하려는 테이블의 행 크기가 스토리지 엔진이 허용하는 최대 행 크기를 초과한다. BLOB/TEXT가 아닌 컬럼의 최대 행 크기는 65535바이트이며, InnoDB에는 페이지 크기에 따른 추가 한도가 있다.
원인
넓은 컬럼(특히 긴 VARCHAR/CHAR)을 많이 정의했거나, utf8mb4 같은 멀티바이트 문자 집합에서 문자당 최대 4바이트를 차지하거나, InnoDB의 COMPACT/REDUNDANT 행 형식에서 큰 컬럼이 인라인으로 저장된 경우다.
해결 방법
일부 큰 컬럼을 TEXT/BLOB로 변환하거나(off-page 저장 가능), 불필요하거나 너무 넓은 컬럼을 줄이거나, 테이블을 둘로 분할한다. InnoDB에서는 ROW_FORMAT=DYNAMIC 또는 COMPRESSED를 사용하면 큰 컬럼이 off-page로 이동되어 도움이 된다: 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 (binary log에 안전하지 않은 문장 기록)
- 3140ER_INVALID_JSON_TEXT: Invalid JSON text
- 1526ER_NO_PARTITION_FOR_GIVEN_VALUE: Table has no partition for value (해당 값에 대한 파티션 없음)