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보다 다소 떨어질 수 있습니다.