MySQL 자료형

MySQL 데이터 타입은 데이터베이스 테이블의 각 열에 저장될 수 있는 값의 종류를 지정하는 중요한 요소입니다. 데이터 타입은 숫자, 문자, 날짜, 기타로 4가지로 나뉩니다.

숫자형 형식

정수형

데이터 타입 바이트 수 숫자 범위 설명
BIT(M) N/8 비트값 타입. 즉, 0과 1로 구성되는 binary 값을 저장
(M : 1~64, 생략 시 기본값은 1 로 설정)
BOOL 1 0, 1 0은 false, 0이 아닌 값은 true 로 간주하는 논리형 데이터ENUM(Y,N) 또는 TINYINT(1) 로 대체하여 사용하는 것을 권장
TINYINT(M) 1 -128 ~ 127
SMALLINT(M) 2 -32,768 ~ 32,767
MEDIUMINT(M) 3 -8,388,608 ~ 8,388,607
INT(M)
INTEGER(M) 4 -2.147483648E+09 ~ 2.147483647E+09
BIGINT(M) 8 9.22E+19 ~ 9.22E+19

고정 소수점

데이터 타입 바이트 수 숫자 범위 설명
DECIMAL(M,D)
NUMERIC(M, D) 5 ~ 17 -1038+1 ~ +1038-1 전체 자릿수(M)와 소수점 이하 자릿수(D)를 가진 숫자형
최대 65자리까지 표현 가능

부동 소수점

데이터 타입 바이트 수 숫자 범위 설명
FLOAT(M,D) 4 -3.40E+38 ~ -1.17E-38 정밀도가 작은 부동소수점을 표현. UNSIGNED 인 경우 음수 값을 허용하지 않습니다.
소수소수점 아래 7자리까지 표현
DOUBLE(M,D) 8 1.22E-308 ~ 1.79E+308 보통 크기의 부동소수점을 표현. UNSIGNED 인 경우 음수 값을 허용하지 않습니다.
소수점 아래 15자리까지 표현

문자형 형식

데이터 타입 바이트 수 설명
CHAR(N) 1~255 1~255 개의 고정 길이를 가지는 문자열을 저장
VARCHAR(N) 1~65535
가변 길이를 가지는 문자열을 저장하며, 후행 공백을 제거하지 않습니다.
(M : 0~65,535)M이 0~255 이면 문자길이+1byte, ~65,535 이면 문자길이+2byte
BINARY(N) 1 ~ 255 고정길이 이진 데이터 값
VARBINARY(N) 1 ~ 255 가변길이 이진 데이터 값
TINYTEXT 1 ~ 255 1~255 개의 가변 길이를 가지는 문자열을 저장 (문자길이+1byte)
TEXT 1 ~ 65535 1~65,535 개의 가변 길이를 가지는 문자열을 저장 (문자길이+2byte)
MEDIUMTEXT 1 ~ 16777215 1~16,777,215 개의 가변 길이를 가지는 문자열을 저장 (문자길이+3byte)
LONGTEXT 1 ~ 4294967295 1~429,496,729 개의 가변 길이를 가지는 문자열을 저장한다. (문자길이+4byte)
TINYBLOB 1 ~ 255 1~255 개의 가변 길이를 가지는 문자열을 저장 (문자길이+1byte)
BLOB 1 ~ 65535 1~65,535 개의 가변 길이를 가지는 문자열을 저장 (문자길이+2byte)
MEDIUMBLOB 1 ~ 16777215 1~16,777,215 개의 가변 길이를 가지는 문자열을 저장 (문자길이+3byte)
LONGBLOB 1 ~ 4294967295 1~429,496,729 개의 가변 길이를 가지는 문자열을 저장한다. (문자길이+4byte)
ENUM 1 또는 2 문자 형태인 value 를 숫자로 저장하여 최대 65,535 개의 문자열 중 한가지를 반환
255 이하 value 는 1바이트, 65,535 이하 value 는 2바이트
SET 1, 2, 3, 4, 8 최대 64개의 중복되지 않는 데이터 값 비트 연산 열거형, ENUM 형과 동일하게 문자열 값을 정수값으로 매핑하여 저장

💡 CHAR vs VARCHAR

CHAR 형식은 고정된 공간을 차지합니다. 예를 들어 특정 열을 CHAR(20)로 설정한다면 10개의 문자열을 삽입시 빈 공간은 공백으로 채워지게 됩니다.

VARCHAR 형식은 가변적 공간을 차지합니다. 예를 들어 특정 열을 CHAR(20)로 설정한다면 10개의 문자 열을 삽입시 해당 글자 수 만큼 공간을 차지하게됩니다.

💡 TEXT vs BLOB

TEXT 는 긴 문자열 데이터를 저장하는 데 사용되며, 주로 게시물의 본문과 같은 큰 텍스트 콘텐츠를 다룰 때 적합합니다. TEXT는 최대 65,535바이트의 데이터를 저장할 수 있으며, 인덱스를 걸 때는 앞부분에만 한정할 수 있지만, 전체 텍스트 검색이 가능한 Full-Text Index를 지원합니다. TEXT는 행의 다른 데이터가 65,535바이트를 초과하는 경우, VARCHAR 대신 사용하면 좋습니다. 다만, TEXT는 기본값을 설정할 수 없고, 성능이 VARCHAR보다 다소 떨어질 수 있습니다.