MySQL 데이터 자료형 타입

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

숫자형 형식

정수형

데이터 타입바이트 수숫자 범위설명
BIT(N)N/8비트값 타입. 즉, 0과 1로 구성되는 binary 값을 저장 (M : 1~64, 생략 시 기본값은 1로 설정)
BOOL10, 10은 false, 0이 아닌 값은 true로 간주하는 논리형 데이터. ENUM(Y,N) 또는 TINYINT(1)로 대체하여 사용하는 것을 권장
TINYINT1-128 ~ 127
SMALLINT2-32,768 ~ 32,767
MEDIUMINT3-8,388,608 ~ 8,388,607
INT4-2.147483648E+09 ~ 2.147483647E+09
BIGINT8-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)81.22E-308 ~ 1.79E+308보통 크기의 부동소수점을 표현. UNSIGNED인 경우 음수 값을 허용하지 않으며, 소수점 아래 15자리까지 표현 가능합니다.

문자형 형식

데이터 타입바이트 수설명
CHAR(N)1~2551~255 개의 고정 길이를 가지는 문자열을 저장
VARCHAR(N)1~65535가변 길이를 가지는 문자열을 저장하며, 후행 공백을 제거하지 않습니다. (N : 0~65,535) N이 0~255이면 문자 길이+1byte, ~65,535이면 문자 길이+2byte
BINARY(N)1~255고정길이 이진 데이터 값
VARBINARY(N)1~255가변길이 이진 데이터 값
TINYTEXT1~2551~255 개의 가변 길이를 가지는 문자열을 저장 (문자 길이+1byte)
TEXT1~655351~65,535 개의 가변 길이를 가지는 문자열을 저장 (문자 길이+2byte)
MEDIUMTEXT1~167772151~16,777,215 개의 가변 길이를 가지는 문자열을 저장 (문자 길이+3byte)
LONGTEXT1~42949672951~429,496,729 개의 가변 길이를 가지는 문자열을 저장 (문자 길이+4byte)
TINYBLOB1~2551~255 개의 가변 길이를 가지는 이진 데이터를 저장 (문자 길이+1byte)
BLOB1~655351~65,535 개의 가변 길이를 가지는 이진 데이터를 저장 (문자 길이+2byte)
MEDIUMBLOB1~167772151~16,777,215 개의 가변 길이를 가지는 이진 데이터를 저장 (문자 길이+3byte)
LONGBLOB1~42949672951~429,496,729 개의 가변 길이를 가지는 이진 데이터를 저장 (문자 길이+4byte)
ENUM1 또는 2문자 형태인 value를 숫자로 저장하여 최대 65,535 개의 문자열 중 한 가지를 반환. 255 이하 value는 1바이트, 65,535 이하 value는 2바이트
SET1, 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은 다중 선택이 필요한 상황에서 유용합니다.


날짜 형식

데이터 타입바이트 수설명
DATE3날짜를 표현하는 타입. 1000-01-01 ~ 9999-12-31까지 저장. 'YYYY-MM-DD' 형식으로 사용.
TIME4시간을 표현하는 타입. -838:59:59 ~ 838:59:59까지 저장. 'HH:MM:SS' 형식으로 사용.
DATETIME5날짜와 시간을 같이 나타내는 타입. 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59까지 저장. 'YYYY-MM-DD HH:MM:SS' 형식으로 사용.
TIMESTAMP81970-01-01 00:00:00 ~ 2037-01-19 03:14:07까지 저장. INSERT, UPDATE 연산에 유리. 'YYYY-MM-DD HH:MM:SS' 형식으로 사용. time_zone 시스템 변수와 관련이 있으며 UTC 시간대로 변환하여 저장.
YEAR1연도를 나타내는 타입. 1901 ~ 2155, 70 ~ 69 (1970~2069)까지 저장. 'YYYY' 형식으로 사용.

💡 DATETIME vs TIMESTAMP

DATETIME은 날짜와 시간 의 '절대적'인 값입니다. 즉, DATETIME은 시간대와 상관없이 저장된 그대로의 날짜와 시간을 유지합니다. 시차와 관계없이 똑같이 읽히는 시간입니다. DATETIME은 1000년부터 9999년까지 기록이 가능합니다.

TIMESTAMP는 ‘상대적’인 값입니다. 시간대의 영향을 받게 되어 저장된 곳 마다 시간이 다르게 읽히는 시간입니다. DATETIME 시간 그대로 저장되지만 TIMESTAMP는 내부적으로 UNIX 타임스탬프 형식으로 저장됩니다. TIMESTAMP은 1970년부터 2038년까지 기록이 가능합니다. TIMESTAMP는 행 추가시 값을 안 넣으면 자동으로 현 시간이 입력됩니다. TIMESTAMP는 서버의 시간대에 따라 저장된 시간이 조정되므로 글로벌 애플리케이션에서 로컬 시간에 따라 데이터를 처리해야 할 때 유용합니다.


기타 형식

데이터 타입바이트 수설명
GEOMETRYN/A공간 데이터 형식으로 선, 점 및 다각형 같은 공간 데이터 개체를 저장.
JSON8JSON 문서를 저장하며, 배열 타입을 지원.

💡 JSON

JSON 타입은 구조화된 데이터를 유연하게 저장하고 관리할 수 있는 방법을 제공합니다. JSON은 일반적으로 비정형 데이터나 구조가 고정되지 않은 데이터를 저장하는 데 유용하며, 다음과 같은 상황에서 사용하면 좋습니다.

  • 빠른 조회보다 데이터의 저장에 중점을 두는 데이터
  • 변화가 없으면서 정형화되지 않으면서 다양한 형식을 변화가 요구되는 데이터
  • 어플리케이션을 통해 데이터를 처리하고 DB에는 단순한 저장이 요구되는 데이터
  • 지속적인 데이터의 형식에 변화가 가능한 데이터

참고 사이트

https://inpa.tistory.com/entry/MYSQL-📚-자료형-타입-종류-정리

https://devdhjo.github.io/mysql/2020/01/30/database-mysql-003.html

profile
함께 개선하는 프론트엔드 개발자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN