Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL VARCHAR 최대 크기, 얼마까지 저장할 수 있을까?

MySQL VARCHAR의 최대 크기는 얼마일까?

MySQL에서 VARCHAR 컬럼이 저장할 수 있는 최대 문자 수는 버전에 따라 크게 다릅니다. 5.0.3 이전 버전에서는 최대 255자까지만 저장할 수 있었지만, 5.0.3 버전부터는 최대 65,535자까지 저장할 수 있도록 확장되었습니다.

최대 행 크기와 문자셋이 실제 최대 길이를 결정한다

MySQL 공식 문서는 이에 대해 다음과 같이 설명합니다.

MySQL 5.0.3 이상에서 VARCHAR의 유효 최대 길이는 최대 행 크기(65,535바이트, 모든 컬럼이 공유)와 사용 중인 문자셋에 따라 달라집니다. 예를 들어 utf8 문자는 한 글자당 최대 3바이트를 차지할 수 있으므로, utf8 문자셋을 사용하는 VARCHAR 컬럼은 최대 21,844자까지만 선언할 수 있습니다.

여기서 핵심은 테이블 행(row) 전체의 최대 크기가 65,535바이트라는 점입니다. 즉, 모든 컬럼의 크기를 합산했을 때 65,535바이트를 초과해서는 안 됩니다.
참고로 한 글자당 최대 4바이트를 사용하는 utf8mb4 문자셋이라면 VARCHAR는 최대 16,383자까지 선언할 수 있습니다.

행 크기 제한을 초과하면 어떻게 될까?

실제 예제를 통해 확인해 보겠습니다. 아래 테이블은 "one" 컬럼에 varchar(32765), "two" 컬럼에 varchar(32766)을 사용합니다.

필요한 바이트 수 = 32765 + 2 + 32766 + 2 = 65,535바이트로, 정확히 제한 범위 안에 들어갑니다.

CREATE TABLE IF NOT EXISTS `mytable` (
`one` varchar(32765) NOT NULL,
`two` varchar(32766) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

이번에는 컬럼 길이를 늘려 보겠습니다.

CREATE TABLE IF NOT EXISTS `mytable` (
`one` varchar(32767) NOT NULL,
`two` varchar(32770) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

위 쿼리를 실행하면 다음과 같은 오류가 발생합니다.

#1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs

오류 메시지가 말해주듯, BLOB 타입을 제외한 테이블의 최대 행 크기는 65,535바이트입니다. 이 값을 초과하면 오류가 발생하며, 일부 컬럼을 TEXT나 BLOB 타입으로 변경해야 합니다.

핵심 정리

- VARCHAR 자체의 이론상 최대값은 MySQL 5.0.3부터 65,535자입니다.
- 실제 선언 가능한 최대 길이는 행 전체 크기 제한(65,535바이트)과 문자셋에 따라 달라집니다.
- utf8(글자당 최대 3바이트) 사용 시 VARCHAR는 최대 21,844자까지 선언할 수 있습니다.
- 행 크기가 65,535바이트를 초과하면 #1118 오류가 발생하며, TEXT 또는 BLOB 타입 활용을 고려해야 합니다.