MySQL 데이터 타입은 데이터베이스 테이블의 각 열에 저장될 수 있는 값의 종류를 지정하는 중요한 요소입니다. 데이터 타입은 숫자, 문자, 날짜, 기타로 4가지로 나뉩니다.
정수형
데이터 타입 | 바이트 수 | 숫자 범위 | 설명 |
---|---|---|---|
BIT(N) | N/8 | 비트값 타입. 즉, 0과 1로 구성되는 binary 값을 저장 (M : 1~64, 생략 시 기본값은 1로 설정) | |
BOOL | 1 | 0, 1 | 0은 false, 0이 아닌 값은 true로 간주하는 논리형 데이터. ENUM(Y,N) 또는 TINYINT(1)로 대체하여 사용하는 것을 권장 |
TINYINT | 1 | -128 ~ 127 | |
SMALLINT | 2 | -32,768 ~ 32,767 | |
MEDIUMINT | 3 | -8,388,608 ~ 8,388,607 | |
INT | 4 | -2.147483648E+09 ~ 2.147483647E+09 | |
BIGINT | 8 | -9.22E+19 ~ 9.22E+19 |
고정 소수점
데이터 타입 | 바이트 수 | 숫자 범위 | 설명 |
---|---|---|---|
DECIMAL(M,D) NUMERIC(M,D) | 5 ~ 17 | -10^(38+1) ~ +10^(38-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 | 가변 길이를 가지는 문자열을 저장하며, 후행 공백을 제거하지 않습니다. (N : 0~65,535) N이 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보다 다소 떨어질 수 있습니다.
BLOB(Binary Large Object) 바이너리 데이터를 저장하는 데 사용되며, 이미지, 비디오, 오디오 파일 등과 같은 파일을 데이터베이스에 저장하고자 할 때 적합합니다. BLOB은 문자 집합과 상관없이 이진 데이터를 그대로 저장하며, TEXT와 유사한 크기의 데이터를 처리할 수 있습니다. BLOB은 텍스트가 아닌 데이터를 저장해야 할 때 사용하는 것이 좋습니다.
💡 ENUM과 SET
ENUM은 미리 정의된 값 중 하나만 선택할 수 있는 데이터 타입으로, 성별이나 상태와 같이 선택지가 명확하고 단일 선택이 필요한 경우에 적합합니다. ENUM은 최대 65,535개의 값을 정의할 수 있으며, 내부적으로 숫자로 저장되어 효율적인 데이터 저장이 가능합니다.
SET은 미리 정의된 값 중 여러 개의 값을 동시에 선택할 수 있는 데이터 타입입니다. 예를 들어, 사용자 취향이나 권한과 같이 다중 선택이 필요한 경우에 사용됩니다. SET은 최대 64개의 값을 가질 수 있으며, 각 값은 비트로 저장되어 여러 값을 동시에 저장하고 처리할 수 있습니다.
ENUM은 단일 선택에 적합하고, SET은 다중 선택이 필요한 상황에서 유용합니다.
데이터 타입 | 바이트 수 | 설명 |
---|---|---|
DATE | 3 | 날짜를 표현하는 타입. 1000-01-01 ~ 9999-12-31까지 저장. 'YYYY-MM-DD' 형식으로 사용. |
TIME | 4 | 시간을 표현하는 타입. -838:59:59 ~ 838:59:59까지 저장. 'HH:MM:SS' 형식으로 사용. |
DATETIME | 5 | 날짜와 시간을 같이 나타내는 타입. 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59까지 저장. 'YYYY-MM-DD HH:MM:SS' 형식으로 사용. |
TIMESTAMP | 8 | 1970-01-01 00:00:00 ~ 2037-01-19 03:14:07까지 저장. INSERT, UPDATE 연산에 유리. 'YYYY-MM-DD HH:MM:SS' 형식으로 사용. time_zone 시스템 변수와 관련이 있으며 UTC 시간대로 변환하여 저장. |
YEAR | 1 | 연도를 나타내는 타입. 1901 ~ 2155, 70 ~ 69 (1970~2069)까지 저장. 'YYYY' 형식으로 사용. |
💡 DATETIME vs TIMESTAMP
DATETIME은 날짜와 시간 의 '절대적'인 값입니다. 즉, DATETIME
은 시간대와 상관없이 저장된 그대로의 날짜와 시간을 유지합니다. 시차와 관계없이 똑같이 읽히는 시간입니다. DATETIME은 1000년부터 9999년까지 기록이 가능합니다.
TIMESTAMP는 ‘상대적’인 값입니다. 시간대의 영향을 받게 되어 저장된 곳 마다 시간이 다르게 읽히는 시간입니다. DATETIME 시간 그대로 저장되지만 TIMESTAMP는 내부적으로 UNIX 타임스탬프 형식으로 저장됩니다. TIMESTAMP은 1970년부터 2038년까지 기록이 가능합니다. TIMESTAMP는 행 추가시 값을 안 넣으면 자동으로 현 시간이 입력됩니다. TIMESTAMP는 서버의 시간대에 따라 저장된 시간이 조정되므로 글로벌 애플리케이션에서 로컬 시간에 따라 데이터를 처리해야 할 때 유용합니다.
데이터 타입 | 바이트 수 | 설명 |
---|---|---|
GEOMETRY | N/A | 공간 데이터 형식으로 선, 점 및 다각형 같은 공간 데이터 개체를 저장. |
JSON | 8 | JSON 문서를 저장하며, 배열 타입을 지원. |
💡 JSON
JSON 타입은 구조화된 데이터를 유연하게 저장하고 관리할 수 있는 방법을 제공합니다. JSON은 일반적으로 비정형 데이터나 구조가 고정되지 않은 데이터를 저장하는 데 유용하며, 다음과 같은 상황에서 사용하면 좋습니다.
https://inpa.tistory.com/entry/MYSQL-📚-자료형-타입-종류-정리
https://devdhjo.github.io/mysql/2020/01/30/database-mysql-003.html