database / / 2023. 1. 25. 15:05

[mysql] SQL Error [1118] [42000]: Row size too large 에러

오류 메시지

MySQL을 사용할 때 아래의 오류가 발생하는 경우가 있다.

SQL Error [1118] [42000]: 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

아래와 같은 경우에 발생한다.

CREATE TABLE large_table (
    col1 VARCHAR(10000), 
    col2 VARCHAR(10000),
    col3 VARCHAR(1843)
) ENGINE=InnoDB CHARACTER SET utf8;

오류 원인

MySQL은 하나의 테이블에 최대 4,096개의 컬럼을 가질 수 있으며 하나의 row 사이즈는 65,535 bytes로 제한이 있다고 한다.
일반적으로 varchar(10000) 등 큰 필드로 지정할 경우 필드 크기의 합이 65,535가 넘는 경우에 발생한다고 한다.

해결 방법

해결 방법은 컬럼의 길이를 줄이거나 varchar 대신에 BLOB나 TEXT 필드를 사용하면 된다.
LOB 타입은 테이블과 분리되어 저장(참조값만 저장)되어서 길이 제한에 걸리지 않는다.

한글의 경우 utf8로 지정했을 경우 3bytes를 차지하므로 크기를 잘 생각해서 만들어야 한다.

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유